C# this和base关键字的用法

this的用法
  • this关键字在类中使用,代表当前类的实例对象,但是它只能被用于实例构造函数、实例方法、属性以及索引器中;
  1. 当局部变量名称与类中字段重名时,用来引用类的字段;
  2. 可以当做当前对象实例作为参数传递到其他方法中;
  3. 声明索引器;
  • 在一个类中有多个构造函数,我们可以把一部分公共代码提取出来作为一个构造函数,被其余的构造函数作为构造函数初始化语句使用,可以用this串联构造函数;
 1 class Car{
 2     private string name;
 3     public void DoSmothing(string name){
 4         this.name=name;//类中字段与局部变量重名
 5         CarTest.Test(this);//当做实例对象参数
 6     }
 7     public Car():this("Car"){}
 8     public Car(string str):this(str,10){}
 9     public Car(string str,int val){}
10     //声明Car car=new Car();会先调用Car(string,int),在调用Car(string),最后是Car();
11 }
12 class CarTest{
13     public static void Test(Car car){};
14 }
  • 为原始类型扩展方法;
  1. 扩展方法是一种特殊的静态方法,它必须定义在静态类中
  2. 扩展方法的第一个参数以this修饰符为前缀,后面跟要扩展的目标模板类型以及其形参;
  3. 扩展方法所在类必须在使用它的类的可见范围,否则需要使用using指令引入命名空间;
  4. 扩展方法只能针对实例,因此目标类不能是静态类;
  5. 拓展方法与被扩展的类中某个方法签名相同,则该拓展方法无效,永远不会被调用;
  6. 同名情况下,其他命名空间的扩展方法的优先级低于当前命名空间的扩展方法,优先级最高的是实例方法;
 1 static class Extends{
 2     //string类型扩展ToJson方法
 3     public static object ToJson(this string Json){
 4         return Json == null ? null : JsonConvert.DeserializeObject(Json);
 5     }
 6     public static T ToObject<T>(this string Json){
 7         return Json == null ? default(T) : JsonConvert.DeserializeObject<T>(Json);
 8     }
 9     public static List<T> ToList<T>(this string Json){
10         return Json == null ? null : JsonConvert.DeserializeObject<List<T>>(Json);
11     }
12     public static DataTable ToTable(this string Json){
13         return Json == null ? null : JsonConvert.DeserializeObject<DataTable>(Json);
14     }
15     public static JObject ToJObject(this string Json){
16         return Json == null ? JObject.Parse("{}") : JObject.Parse(Json.Replace("&nbsp", ""));
17     }
18
base的用法
  1. 在派生类调用基类方法和字段等成员;
  2. 在派生类调用基类的构造方法;
 1 class BaseClass{
 2     public string FieldA="基类";
 3     public void MethodA(){};
 4     public BaseClass(){}
 5     public BaseClass(string str){}
 6 }
 7 class ChildClass:BaseClass{
 8     new public string FieldA="";//new 屏蔽基类成员
 9     public ChildClass():base(){}//ChildClass child=new ChildClass();先调用基类无参构造函数,在调用派生类无参构造函数
10     public ChildClass(string str):base(str){}//ChildClass child=new ChildClass("name");先调用基类有参构造函数,在调用派生类有参构造函数
11     //如果没有base(str) 则是先调用默认的基类无参构造函数
12     public void Print(){
13         Console.WriteLine(base.FieldA);//调用基类字段
14         base.MethodA();//调用基类方法
15     }
16 }
原文地址:https://www.cnblogs.com/My-Sun-Shine/p/13513893.html