A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

C#中new关键字的几种用法都有什么啊?

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

5 个回复

倒序浏览
new关键字通常用来声明对象,如:数组的声明、非静态方法的调用!

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
(1)new运算符用于创建对象和调用构造函数。

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

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

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 刘真 于 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 约束完全不懂啊!请高手指点!

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
(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修饰符修饰它。

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
第一种:new Class();

第二种:覆盖方法

public new XXXX(){}

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

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马