C# this 4种用法

1. [代码]首先,我们分别创建User和VIP两个C#类 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace AppConsole
{
 
    /// <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
    {
 
    }
}

2. [代码]this第【1】种用法,索引器   

/// <summary>
/// 全局变量
/// </summary>
Dictionary<string, object> dictInfo = null;
 
/// <summary>
/// this,第【1】种用法,索引器
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public object this[string name]
{
    get { return dictInfo[name]; }
    set { dictInfo[name] = value; }
}
3. [代码]this第【2】种用法,当做参数传递  
/// <summary>
/// this第【2】种用法,当做参数传递
/// </summary>
public void Said()
{
    new VIP().Say(this);
}
4. [代码]this第【3】种用法,通过this()调用无参构造函数   
/// <summary>
/// this第【3】种用法,通过this()调用无参构造函数
/// </summary>
/// <param name="UserName"></param>
public VIP(string UserName)
    : this()
{
    this.UserName = UserName;
}
5. [代码] this第【4】种用法:扩展User类    

/// <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));
    }
}
6. [代码]最后,控制台测试   

/// <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();
 
}
7. [图片] 测试结果.png 


转载自李朝强-开源中国  




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值