this的作用--转载

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AppConsole
{
    class Program
    {
        /// <summary>
        /// 主程序入口
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {

            //0>声明实体
            User user = new User();
            user.ID = 1;
            user.UserName = "lichaoqiang";

            //第【一】种用法:this用作索引器 public object this[string name]{……}
            user["UserID"] = 1;
            Console.WriteLine("第【一】种用法:this用作索引器");

            //第【二】种用法:this用作参数传递 user.Say(this);
            Console.WriteLine("第【二】种用法:this用作参数传递");
            user.Said();

            //第【三】种用法:this() public VIP:this(){   }
            VIP vip = new VIP("yezi");
            vip.Said();
            Console.WriteLine("第【三】种用法:this()");

            //第【四】种用法: this扩展VIP类 public static Sing(this User user){……}
            Console.WriteLine("第【四】种用法: this扩展VIP类");
            user.Sing();

            Console.Read();

        }

    }

    /// <summary>
    /// 普通用户
    /// </summary>
    public class User
    {
        /// <summary>
        /// 全局变量
        /// </summary>
        Dictionary<string, object> dictInfo = null;

        /// <summary>
        /// 构造器
        /// </summary>
        public User()
        {
            dictInfo = new Dictionary<string, object>();
        }

        /// <summary>
        /// 构造函数重载
        /// </summary>
        /// <param name="UserID"></param>
        /// <param name="UserName"></param>
        public User(int UserID, string UserName)
        {
            this.UserName = UserName;
            this.ID = UserID;
        }

        /// <summary>
        /// this,第【1】种用法,索引器
        /// </summary>
        /// <param name="name"></param>
        /// <returns></returns>
        public object this[string name]
        {
            get { return dictInfo[name]; }
            set { dictInfo[name] = value; }
        }

        /// <summary>
        /// 编号
        /// </summary>
        public int ID { get; set; }

        /// <summary>
        /// 用户名
        /// </summary>
        public string UserName { get; set; }

        /// <summary>
        /// this第【2】种用法,当做参数传递
        /// </summary>
        public void Said()
        {
            new VIP().Say(this);
        }

    }

    /// <summary>
    /// 会员
    /// </summary>
    public class VIP : User
    {

        /// <summary>
        /// 积分
        /// </summary>
        public int integral { get; set; }

        /// <summary>
        /// 构造函数
        /// </summary>
        public VIP()
        {
            ID = 520;
            integral = 1000;
        }

        /// <summary>
        /// this第【3】种用法,通过this()调用无参构造函数
        /// </summary>
        /// <param name="UserName"></param>
        public VIP(string UserName)
            : this()
        {
            this.UserName = UserName;
        }

        /// <summary>
        /// 构造函数重载
        /// </summary>
        /// <param name="UserID"></param>
        /// <param name="UserName"></param>
        public VIP(int UserID, string UserName)
            : base(UserID, UserName)
        {

        }

        /// <summary>
        ///Say方法
        /// </summary>
        /// <param name="user"></param>
        public void Say([LCQAttribute] User user)
        {
            Console.WriteLine(string.Format("嗨,大家好!我的编号是{0},大家可以叫我{1}!", user.ID, user.UserName));
        }

    }

    /// <summary>
    /// 静态类,来扩展User类
    /// </summary>
    public static class Helper
    {

        /// <summary>
        /// 第【4】种用法: this扩展User类
        /// </summary>
        /// <param name="user"></param>
        public static void Sing(this User user)
        {
            Console.WriteLine(string.Format("嗨,大家好!我的编号是{0},大家可以叫我{1}!", user.ID, user.UserName));
        }
    }

    /// <summary>
    /// 特性类:指定特性仅适用于方法和方法的参数
    /// </summary>
    [System.AttributeUsage(AttributeTargets.Method | AttributeTargets.Parameter)]
    public class LCQAttribute : System.Attribute
    {

    }
}
时间: 2024-11-08 16:09:56

this的作用--转载的相关文章

iOS中都有什么设计模式?各个设计模式的作用 (转载)

原文地址: http://www.cnblogs.com/dxb123456/p/5479198.html 一  iOS中都有什么设计模式? 1.代理模式 2.观察者模式 3.MVC模式 4.单例模式 5.策略模式 6.工厂模式 二  各个设计模式的作用? (一)代理模式 在观察者模式中,一个对象任何状态的变更都会通知另外的对改变感兴趣的对象.这些对象之间不需要知道彼此的存在,这其实是一种松耦合的设计.当某个属性变化的时候,我们通常使用这个模式去通知其它对象. 此模式的通用实现中,观察者注册自己

spring各jar包作用(转载)

除了spring.jar文件,Spring还包括有其它13个独立的jar包,各自包含着对应的Spring组件,用户可以根据自己的需要来选择组合自己的jar包,而不必引入整个spring.jar的所有类文件. (1) spring-core.jar 这个jar文件包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心,当然你也可以在自己的应用系统中使用这些工具类. (2) spring-beans.jar 这个jar文件是所有应用都要用到的,它包含

linux文件结构---转发

linux各文件夹的作用---转载 linux下的文件结构,看看每个文件夹都是干吗用的/bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示 /lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件 /sbin 系统管理命令,这里存放的是系统管理员使用的管理程序 /tmp 公用的临时文件存储点 /ro

Java 对象的序列化和反序列化

先创建一个实现了Serializable接口的对象 import java.io.Serializable; /** * 可序列化Person对象. * @author Ramer * Sep 18, 2016 */ public class SerializablePerson implements Serializable{ private static final long serialVersionUID = 1L; private String name; private String

柔性数组(结构体最后一个域为0/1数组)

结构体最后的长度为0或1数组的作用(转载) 2012-05-07 17:07:09 其实很 早在看LINUX下就看到这个东西,后来在MFC内存池里同样也看到了类似的东西,还依照MFC写过一个类似的小内存池,(MFC用的是return this + 1)后来在李先静的<系统程序员成长计划>里看到了类似的定义,于是心里想着总结一下,结果发现网上已经有牛人总结的很好了,于是乎就转了过来,谢谢你们 的分享,这是我前进的动力!同时,需要引起注意的:ISO/IEC 9899-1999里面,这么写是非法的,

[转载] web.xml之&lt;context-param&gt;与&lt;init-param&gt;的区别与作用

原文地址: http://www.cnblogs.com/hzj-/articles/1689836.html <context-param>的作用:web.xml的配置中<context-param>配置作用1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> 和 <context-param></context-param> 2.紧接着,

ProGuard的作用、使用及bug分析(转载)

ProGuard的作用.使用及bug分析 本文主要ProGuard的作用.使用及bug分析.1.ProGuard作用ProGuard通过删除无用代码,将代码中类名.方法名.属性名用晦涩难懂的名称重命名从而达到代码混淆.压缩和优化的功能,跟JavaScript的混淆压缩类似.压缩和优化使得编译后apk包更小.混淆可以保证代码在被反编译后读懂的难度很大,防止逆向工程.这点也是我们在应用发布前需要ProGuard的一大原因. 2.ProGuard的使用(1). 系统应用:在项目根目录下的Android

out,ref的作用和区别(转载)

ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数.通过引用传递参数允许函数成员更改参数的值,并保持该更改.若要通过引用传递参数, 可使用ref或out关键字.ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量.它们的区别是: 1.使用ref型参数时,传入的参数必须先被初始化.对out而言,必须在方法中对其完成初始化. 2.使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字.以满足匹配. 3.out适合用在需要retrun多个返回值

HTML中小meta的大作用----网上转载

meta是用来在HTML文档中模拟HTTP协议的响应头报文.meta 标签用于网页的<head>与</head>中,meta 标签的用处很多.meta 的属性有两种:name和http-equiv.name属性主要用于描述网页,对应于content(网页内容),以便于搜索引擎机器人查找.分类(目前几乎所有的搜索引擎都使用网上机器人自动查找meta值来给网页分类).这其中最重要的是description(站点在搜索引擎上的描述)和keywords(分类关键词),所以应该给每页加一个m