用法一:this代表当前实例对象
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
public class Test
{
private string strText = "GolbalValue";
public string getText()
{
string strText = "LocalValue";
return this.strText + "-" + strText;
}
}
class Program
{
static void Main(string[] args)
{
try
{
Test test = new Test();
Console.WriteLine(test.getText());
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
finally
{
Console.ReadLine();
}
}
}
}
运行结果:
GolbalValue-LocalValue
用法二:用this串联构造函数
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
public class Test
{
public Test()
{
Console.WriteLine("No parameter constructor");
}
// this()对应无参构造方法Test()
// 先执行Test(),后执行Test(string text)
public Test(string text)
: this()
{
Console.WriteLine(text);
Console.WriteLine("Parameter constructor");
}
}
class Program
{
static void Main(string[] args)
{
try
{
Test test = new Test("Jack");
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
finally
{
Console.ReadLine();
}
}
}
}
No parameter constructor
Jack
Parameter constructor
这种方式可以让我们实现构造函数的复用,节省不必要的代码重复,如下一遍文章则说明了用this串联多个构造函数的相关过程
https://www.jb51.net/article/60445.htm
方法三、用原始类型扩展方法
用途:扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。
它们的第一个参数指定该方法作用于哪个类型,并且该参数以 this 修饰符为前缀。仅当您使用 using 指令将命名空间显式导入到源代码中之后,扩展方法才位于范围中。
定义和调用扩展方法:
1、定义一个静态类以包含扩展方法。该类必须对客户端代码可见。有关可访问性规则的更多信息,请参见访问修饰符(C# 编程指南)。
2、将该扩展方法实现为静态方法,并使其至少具有与包含类相同的可见性。
3、该方法的第一个参数指定方法所操作的类型;该参数必须以 this 修饰符开头。
4、在调用代码中,添加一条 using 指令以指定包含扩展方法类的命名空间。
5、按照与调用类型上的实例方法一样的方式调用扩展方法。
请注意,第一个参数不是由调用代码指定的,因为它表示正应用运算符的类型,并且编译器已经知道对象的类型。您只需通过 n 为这两个形参提供实参。
示例
下面的示例在 MyExtensions.StringExtension 类中实现了一个名为 WordCount 的扩展方法。该方法对 String 类进行操作,而该类被指定为第一个方法参数。MyExtensions 命名空间被导入到应用程序命名空间中,并且该方法是在 Main 方法内调用的。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ExtensionMethods;
namespace ExtensionMethods
{
public static class MyExtensions
{
public static int WordCount(this String str)
{
return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
}
}
}
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string s = "Hello Extension Methods";
int i = s.WordCount();
Console.WriteLine("WorldCount={0}", i);
}
}
}
方法四:索引器
索引器是一组get和set访问器,与属性类似。
//如下是一个类的索引器的表现形式
string this[int index]
{
set
{
//SetAccessorCode
}
get
{
//GetAccessorCode
}
}
索引器示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
class Class1
{
int Temp0;
int Temp1;
public int this[int index]
{
get
{
return (0 == index)
? Temp0
: Temp1;
}
set
{
if (0==index)
Temp0 = value;
else
Temp1 = value;
}
}
}
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Class1 a = new Class1();
Console.WriteLine("Value -- T0:{0}, T1:{1}", a[0], a[1]);
a[0] = 15;
a[1] = 20;
Console.WriteLine("Value -- T0:{0}, T1:{1}", a[0], a[1]);
}
}
}
运行结果:
Value -- T0:0, T1:0
Value -- T0:15, T1:20
请按任意键继续. . .