黑马程序员技术交流社区

标题: C#中new关键字的几种用法都有什么啊? [打印本页]

作者: 职业规划-蔡红微老师    时间: 2012-4-9 17:11
标题: C#中new关键字的几种用法都有什么啊?
C#中new关键字的几种用法都有什么啊?
作者: 刘冬晓    时间: 2012-4-9 17:14
new关键字通常用来声明对象,如:数组的声明、非静态方法的调用!
作者: 吴永飞    时间: 2012-4-9 17:15
(1)new运算符用于创建对象和调用构造函数。

(2)new修饰符用于隐藏基类成员的继承成员。

(3)new约束用于在泛型声明中约束可能用作类型参数的参数的类型。

作者: 刘真    时间: 2012-4-10 09:22
本帖最后由 刘真 于 2012-4-10 09:24 编辑
吴永飞 发表于 2012-4-9 17:15
(1)new运算符用于创建对象和调用构造函数。

(2)new修饰符用于隐藏基类成员的继承成员。


还不知道new有这么多作用,虽然可能都用过,但是却不知道具体的应用。百度了一下,补充如下,希望能进一步理解。

1. new作运算符时有两种用法,创建对象和调用构造函数。例如:
      1)创建已知类的对象:class1 obj=new class1();
         2)也可用于创建匿名类型的实例://这个不清楚,什么是匿名类型
             var query = from cust in customer                  
             select new {Name=cust.Name,Address=cust.PrimaryAddress};
         3)也可用于调用值类型的默认构造函数:
         int i= new int(); //等同于  int i=0;因为0是int类型的默认值。
2.new做修饰符使用。
new关键字可以显示隐藏从基类继承的成员。隐藏继承的成员时,该成员的派生类版本将替换基类版本,在不使用new关键字隐藏成员时会产生警告,在使用了new关键字后可以消除该警告,并记录要替换成派生版本这一事实。
若要隐藏继承的成员,应使用相同名称在派生类中声明该成员,并使用new修饰符修饰该成员,例如:
使用DerivedC.Invoke()隐藏了BaseC.Invoke()

public class BaseC {
      public int x;
    public void Invoke(){}
}
public class DerivedC :BaseC {
         new public void Invoke(){}
}
3.new约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。如果使用new约束,则该类型不能为抽象类型。
当泛型类创建类型的新实例,将new约束应用于类型参数,例如:
class ItemFactory<T> where T :new() {    //where 代表什么含义?完全没用过?
   public T GetNewItem()    {   
       return new T();
   }
}
当与其它约束一起使用时,new()约束必须最后指定,例如:

public class ItemFactory2<T>
   where T :IComparable,new() {

   }
//new 约束完全不懂啊!请高手指点!


作者: 白建新    时间: 2012-4-10 11:00
(1)new运算符用于创建对象和调用构造函数。

(2)new修饰符用于隐藏基类成员的继承成员。

(3)new约束用于在泛型声明中约束可能用作类型参数的参数的类型。

new运算符

1.用于创建对象和调用构造函数

例:Class_TestMyClass=newClass_Test();

2.也用于为值类型调用默认的构造函数

例:intmyInt=newint();

myInt初始化为0,它是int类型的默认值。该语句的效果等同于:intmyInt=0;

3.不能重载new运算符。

4.如果new运算符分配内存失败,则它将引发OutOfMemoryException异常。

new修饰符

使用new修饰符显式隐藏从基类继承的成员。若要隐藏继承的成员,请使用相同名称在派生类中声明该成员,并用new修饰符修饰它。

作者: 崔楠    时间: 2012-4-12 13:45
第一种:new Class();

第二种:覆盖方法

public new XXXX(){}

第三种:new 约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2