①做运算符

用于创建对象和调用构造函数,小栗子a如下:

Class1 obj  = new Class1();

创建匿名类型的实例,小栗子b如下:

var query = from cust in customers
            select new {Name = cust.Name, Address = cust.PrimaryAddress};

该语句的效果等同于:int i=0;

int i = new int();

可以在结构类型上声明参数化构造函数以设置其初始值,但是,只有在需要默认值之外的值时才必须这样做。

 

②做修饰符,用于向基类成员隐藏继承成员

作为修饰符,基本的规则可以总结为:实现派生类中隐藏方法,则基类方法必须定义为virtual;new作为修饰符,实现隐藏基类成员时,不可和 override共存,原因是这两者语义相斥:new用于实现创建一个新成员,同时隐藏基类的同名成员;而override用于实现对基类成员的扩展。

小栗子b如下:

        class Number
        {
            public static int i = 123;
            public void ShowInfo()
            {
                Console.WriteLine("base class---");
            }
            public virtual void ShowNumber()
            {
                Console.WriteLine(i.ToString());
            }
        }

        class IntNumber : Number
        {
            new public static int i = 456;
            public new virtual void ShowInfo()
            {
                Console.WriteLine("Derived class---");
            }
            public override void ShowNumber()
            {
                Console.WriteLine("Base number is {0}", Number.i.ToString());
                Console.WriteLine("New number is {0}", i.ToString());
            }
        }
        static void Main(string[] args)
        {
            Number num = new Number();
            num.ShowNumber();     //123
            IntNumber intNum = new IntNumber();
            intNum.ShowNumber();  //123   456

            Number number = new IntNumber();
            //究竟调用了谁?
            number.ShowInfo();  //base class---
            //究竟调用了谁?
            number.ShowNumber(); //派生类里面重写了ShowNumber(), 所以输出的是:  123  456
            Console.ReadKey();
        }

运算结果:

关键字 new 的作用

③作为约束

当与其他约束一起使用时,new() 约束必须最后指定.

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-04-25
  • 2021-12-03
  • 2022-12-23
  • 2021-10-26
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-11-19
  • 2022-12-23
  • 2021-11-30
  • 2022-12-23
  • 2022-01-21
  • 2022-12-23
相关资源
相似解决方案