zoukankan      html  css  js  c++  java
  • 关键字的几种用法

    转载于: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();
               
            }
    }
    复制代码
  • 相关阅读:
    WebView与 JS 交互方式
    ES6常用知识点
    Flash Builder 破解与开发环境配置
    如何修改默认浏览器
    基本数据类型和常用内建对象
    VS 2010 使用技巧
    javascript之事件驱动编程的几个基本概念
    javascript笔记之DHTML基础
    浏览器对象模型
    开发心得记录
  • 原文地址:https://www.cnblogs.com/likui-bookHouse/p/8390576.html
Copyright © 2011-2022 走看看