C#中的this用法,相信大家应该有用过,但你用过几种?以下是个人总结的this几种用法,欢迎大家拍砖,废话少说,直接列出用法及相关代码。
this用法1:限定被相似的名称隐藏的成员
/// <summary>
/// /******************************************/
/// /* this用法1:限定被相似的名称隐藏的成员 */
/// /******************************************/
/// </summary>
/// <param name="Name"></param>
public Person(string Name, string Sex)
{
this.Name = Name;
this.Sex = Sex;
}
this用法2:将对象作为参数传递到其他方法
/// <summary>
///Person 的摘要说明
/// </summary>
public class Person
{
/// <summary>
/// 姓名
/// </summary>
public string Name { set; get; }
/// <summary>
/// /*******************************************/
/// /* this用法2:将对象作为参数传递到其他方法 */
/// /*******************************************/
/// </summary>
public void ShowName()
{
Helper.PrintName(this);
}
}
/// <summary>
/// 辅助类
/// </summary>
public static class Helper
{
/// <summary>
/// 打印人名
/// </summary>
/// <param name="person"></param>
public static void PrintName(Person person)
{
HttpContext.Current.Response.Write("姓名:" + person.Name + "<br />");
}
}
this用法3:声明索引器
/// <summary>
/// 其它属性
/// </summary>
public NameValueCollection Attr = new NameValueCollection();
/// <summary>
/// /*************************/
/// /* this用法3:声明索引器 */
/// /*************************/
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public string this[string key]
{
set
{
Attr[key] = value;
}
get
{
return Attr[key];
}
}
this用法4:扩展对象的方法
/// <summary>
///Person 的摘要说明
/// </summary>
public class Person
{ /// <summary>
/// 性别
/// </summary>
public string Sex { set; get; }
}
/// <summary>
/// 辅助类
/// </summary>
public static class Helper
{
/// <summary>
/// /*****************************/
/// /* this用法4:扩展对象的方法 */
/// /*****************************/
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
public static string GetSex(this Person item)
{
return item.Sex;
}
}
调用:
Person person = new Person();
person.GetSex();
四种用法完整代码如下:
show sourceusing System;
using System.Collections.Generic;
using System.Web;
using System.Collections;
using System.Collections.Specialized;
/// <summary>
///Person 的摘要说明
/// </summary>
public class Person
{
/// <summary>
/// 姓名
/// </summary>
public string Name { set; get; }
/// <summary>
/// 性别
/// </summary>
public string Sex { set; get; }
/// <summary>
/// 其它属性
/// </summary>
public NameValueCollection Attr = new NameValueCollection();
public Person()
{
}
/// <summary>
/// /******************************************/
/// /* this用法1:限定被相似的名称隐藏的成员 */
/// /******************************************/
/// </summary>
/// <param name="Name"></param>
public Person(string Name, string Sex)
{
this.Name = Name;
this.Sex = Sex;
}
/// <summary>
/// /*******************************************/
/// /* this用法2:将对象作为参数传递到其他方法 */
/// /*******************************************/
/// </summary>
public void ShowName()
{
Helper.PrintName(this);
}
/// <summary>
/// /*************************/
/// /* this用法3:声明索引器 */
/// /*************************/
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
public string this[string key]
{
set
{
Attr[key] = value;
}
get
{
return Attr[key];
}
}
}
/// <summary>
/// 辅助类
/// </summary>
public static class Helper
{
/// <summary>
/// /*****************************/
/// /* this用法4:扩展对象的方法 */
/// /*****************************/
/// </summary>
/// <param name="item"></param>
/// <returns></returns>
public static string GetSex(this Person item)
{
return item.Sex;
}
/// <summary>
/// 打印人名
/// </summary>
/// <param name="person"></param>
public static void PrintName(Person person)
{
HttpContext.Current.Response.Write("姓名:" + person.Name + "<br />");
}
}
调用示例:
show source//this用法1示例
Person person = new Person("小她", "女");
//this用法2示例
person.ShowName();
//this用法3示例
person["Height"] = "175cm";
Response.Write("身高:" + person["Height"] + "<br />");
person["Weight"] = "110kg";
Response.Write("体重:" + person["Weight"] + "<br />");
//this用法4示例
Response.Write("性别:" + person.GetSex() + "<br />");
1 第一个this的意思是调用Car(int petals)方法的属性petals。
2 第二个this的意思是实例化Car(String s,int petals)方法中的参数s(this.s= s)。
3 第三个this是调用Car(String s,int petals)方法的两个参数并传参。
4
5 在C#中,this关键字代表当前实例,我们可以用this.来调用当前实例的成员方法,变量,属性,字段等;
6 也可以用this来做为参数状当前实例做为参数传入方法.
7 还可以通过this[]来声明索引器
8
9 下面是你这段程序的注解:
10 using System;// 引入使命空间System
11 namespace CallConstructor// 声明命名空间CallConstructor
12 {
13 publicclass Car// 声明类Car
14 {
15 int petalCount=0;//在Car类中声明一个非静态的整型变量petalCount,初始值为0
16 用Static声明的变量叫做非静态变量,非静态成员属类的实例,我们只能在调用类的构
17 造函数对类进行实例化后才能通过所得的实例加"."来访问声明一个非静态的字符串变量s,
18 初始值为"null"; 注意:s = "null"与s = null是不同的
19 String s="null";
20 Car(int petals)// Car类的默认构造函数
21 {
22 petalCount= petals; // Car类的默认构造函数中为 petalCount 赋值为传入的参数petals的值
23 Console.WriteLine("Constructor w/int arg only,petalCount ="+ petalCount);// 输出petalCount
24 }
25 Car(String s,int petals)// 重载Car类的构造函数 Car(String s, int petals)的第二个参数
26 : this(petals) // : this(petals) 表示从当前类中调用petals变量的值来作为构造函数重载方法
27 {
28 this.s= s;
29 Console.WriteLine("String & int args");
30 }
31 // 在构造函数中为s赋值
32 // 非静态成员可以在构造函数或非静态方法中使用this.来调用或访问,也可以直接打变量的名字,因此这一句等效于s = s,
33 //但是这时你会发类的变量s与传入的参数s同名,这里会造成二定义,所以要加个this.表示等号左边的s是当前类自己的变量
34 Car() // 重载构造函数,:
35 : this("hi",47) // this("hi", 47) 表示调Car(String s, int petals) 这个重载的构造函数,并直接传入变量"hi"和47
36 {
37 Console.WriteLine("default constructor");
38 }
39 publicstaticvoid Main()
40 {
41 Car x =new Car();
42 Console.Read();
43 }
44 }
45 }