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