好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#中new的用法及与override的区别分析

c#中new的用法有三种:

(1)new是运算符,用于创建对象和调用构造函数。如class1=new class1();也可以为值类型调用默认的构造函数如int a=new int();此时a=0.

(2)new是修饰符,用于隐藏基类成员的继承成员。override不能隐藏积累成员的继承成员。如:

?

using system;

using system.collections.generic;

using system.linq;

using system.text;

 

namespace a

{

  

   class program

   {

     abstract public class test

     {     

       public virtual void prinf()

       {

         console.writeline( "abstract printf..." );

       }

     }

     public class class1 : test

     {

      

       public override void prinf()

       {

 

         console.writeline( "class one override printf..." );

       }

       

     }

 

     public class class2 : test

     {

       public new void prinf()

       {

 

         console.writeline( "class two new printf..." );

       }

     }

 

    

     static void main( string [] args)

     {

 

       class1 cls1 = new class1();

       class2 cls2 = new class2();

       cls1.prinf();

       cls2.prinf();

       ((test)cls1).prinf();

       ((test)cls2).prinf();

 

       console.readline();   

 

     }

   }

}

运行结果表明:new修饰符隐藏了重写方法,通过将派生对象转为为基类对象,调用了基类的方法。而override则是完全重写了方法,即便是转为基类对象也调用的也是派生类的重写方法。

即:new隐藏的基类方法,override重写基类方法。

(3)new是约束。用在泛型中添加类型的约束。

?

using system;

using system.collections.generic;

using system.linq;

using system.text;

 

namespace a

{

   class test<t>

     where t : new () //定义类型t的约束,表示t类型必须有不带参数的构造函数

   {

     public t getitem()

     {

       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();   

 

     }

   }

}

注释:参考http://msdn.microsoft.com/zh-cn/library/sd2w2ew5.aspx

dy("nrwz");

查看更多关于C#中new的用法及与override的区别分析的详细内容...

  阅读:41次