• 关键字的几种用法


    转载于:https://www.cnblogs.com/a164266729/p/5278826.html

      写new关键字的几种用法(最近看面试题中出现了这个问题,所以百度了一下,转载了这篇写得很详细的文章!)

      第一种 创建对象、调用构造函数,这就不用讲了 ClassA  A=new ClassA();

      第二种 是作为修饰符,显示隐藏继承于基类的继承成员 

    复制代码
      class Program
        {
            static void Main(string[] args)
            {
                Class1 cls1 = new Class1();
                Class2 cls2 = new Class2();
                cls1.Prinf();
                cls2.Prinf();
                Test t1 = new Class1();
                Test t2 = new Class2();
                t1.Prinf();
                t2.Prinf();
                Console.ReadLine();
            }
    
            abstract public class Test
            {
                public virtual void Prinf()
                {
                    Console.WriteLine("base Printf...");
                }
            }
            public class Class1 : Test
            {
                public override void Prinf()
                {
                    Console.WriteLine("Class1  Printf...");
                }
            }
    
            public class Class2 : Test
            {
                public new void Prinf()
                {
                    Console.WriteLine("Class2  Printf...");
                }
            }
        }
    复制代码

    我们可以看到 打印的最后一条信息 子类继承于父类的方法被隐藏,实现了父类的方法,override 则完全重写了方法,即使转变为基类对象调用的也是派生类的重写方法。

      第三种 是用在泛型中添加类型的约束

      

    复制代码
     class Test<T>
        where T : new()//定义类型T的约束,表示T类型必须有不带参数的构造函数
        {
            public T GetItem()
            {
                // return T();
                return new T();//如果不添加new()约束,编译错误:变量类型“T”没有 new() 约束,因此无法创建该类型的实例
                //想一下,T类型不知道,编译器不知道分配多大的空间,所以会通过反射技术实现
            }
        }
        class TClass
        {
            private int a;
    
            public TClass()  //如果不添加无参构造函数,编译错误:TClass必须是具有公共的无参数构造函数的非抽象类型,才能用作泛型类型或方法“A.Test<T>”中的参数“T”
            {
    
            }
            public TClass(int a)
            {
                this.a = a;
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                Test<TClass> test = new Test<TClass>();
                Console.ReadLine();
               
            }
    }
    复制代码
  • 相关阅读:
    STM32 端口复用配置
    stm32 新建文件记得添加到工程
    keil解决SYSTEMsysstm32f10x.h(298): error: #67: expected a "}"
    解决Keil复制中文乱码
    STM32 MPU6050 源码
    STM32 PWM输出
    STM32定时器
    STM32 看门狗操作姿势
    开课博客
    第二周学习进度
  • 原文地址:https://www.cnblogs.com/likui-bookHouse/p/8390576.html
Copyright © 2020-2023  润新知