• 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 }
  • 相关阅读:
    大数据应用期末总评
    分布式文件系统HDFS 练习
    安装Hadoop
    爬虫综合大作业
    爬取全部的校园新闻
    理解爬虫原理
    中文词频统计与词云生成
    复合数据类型,英文词频统计
    字符串操作、文件操作
    了解大数据的特点、来源与数据呈现方式
  • 原文地址:https://www.cnblogs.com/My-Sun-Shine/p/13513893.html
Copyright © 2020-2023  润新知