C#中this的用法集锦

所属分类: 软件编程 / C#教程 阅读数: 78
收藏 0 赞 0 分享

this 关键字引用类的当前实例,还可用作扩展方法的第一个参数的修饰符。下面就针对this的四种用法,做简单的总结。

首先,我们分别创建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
  {
 
  }
}

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; }
}

this第【2】种用法,当做参数传递

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

this第【3】种用法,通过this()调用无参构造函数

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

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));
  }
}

最后,控制台测试

/// <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();
 
}

最终结果示意图

以上所述上就是本文的全部内容了,希望大家能够喜欢。

更多精彩内容其他人还在看

c#开发word批量转pdf源码分享

已经安装有Office环境,借助一些简单的代码即可实现批量Word转PDF,看下面的实例源码吧
收藏 0 赞 0 分享

c# xml API操作的小例子

这篇文章主要介绍了c# xml API操作的小例子,有需要的朋友可以参考一下
收藏 0 赞 0 分享

c#唯一值渲染实例代码

这篇文章主要介绍了c#唯一值渲染实例代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

淘宝IP地址库采集器c#代码

这篇文章主要介绍了淘宝IP地址库采集器c#代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C#在后台运行操作(BackgroundWorker用法)示例分享

BackgroundWorker类允许在单独的专用线程上运行操作。如果需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用BackgroundWorker类方便地解决问题,下面看示例
收藏 0 赞 0 分享

c#文本加密程序代码示例

这是一个加密软件,但只限于文本加密,加了窗口控件的滑动效果,详细看下面的代码
收藏 0 赞 0 分享

c#生成站点地图(SiteMapPath)文件示例程序

这篇文章主要介绍了c#生成站点地图(SiteMapPath)文件的示例,大家参考使用
收藏 0 赞 0 分享

C# 键盘Enter键取代Tab键实现代码

这篇文章主要介绍了C# 键盘Enter键取代Tab键实现代码,有需要的朋友可以参考一下
收藏 0 赞 0 分享

C# WinForm导出Excel方法介绍

在.NET应用中,导出Excel是很常见的需求,导出Excel报表大致有以下三种方式:Office PIA,文件流和NPOI开源库,本文只介绍前两种方式
收藏 0 赞 0 分享

C#串口通信程序实例详解

在.NET平台下创建C#串口通信程序,.NET 2.0提供了串口通信的功能,其命名空间是System.IO.Ports,创建C#串口通信程序的具体实现是如何的呢?让我们开始吧
收藏 0 赞 0 分享
查看更多