从来没总结过什么,感觉自己老大不小了,今天开始尝试着做些学习笔记。
一、new在.net 中有几个用途?
1、作为运算符,用于创建对象和调用构造函数。
- new一个class 时,new完成了以下两方面内容:一是调用newobj命令来为实例在托管堆上分配内存,二是调用构造函数来实例对象初始化。
- new一个struct时,new运输符用于调用其构造函数,完成实例的初始化。
- new一个int时,new运算符用于初始化其值为0。
2、作为修饰符,用于向基类成员隐藏继承成员。
代码
public class Program
{
public static void Main(string[] args)
{
C c1 = new C1();
c1.ShowInfo(); //C
C c2 = new C2();
c2.ShowInfo(); //C2
(c1 as C1).ShowInfo(); //C1
}
}
public class C
{
public virtual void ShowInfo()
{
Console.WriteLine("C");
}
}
public class C1 : C
{
public new void ShowInfo()
{
Console.WriteLine("C1");
}
}
public class C2 : C
{
public override void ShowInfo()
{
Console.WriteLine("C2");
}
}
new是继承类对基类方法的重写而在继承类中产生新的方法,这时基类方法和继承方法之间没有任何的关系了,可是override就不同了,它也是对基类中方法的重写,但此时只是继承类重写了一次基类的方法。
3、作为约束,用于在泛型声明中约束可能用作类型参数的参数的类型。
public class Program
{
public static void Main(string[] args)
{
Genericer<MyCls> myGen = new Genericer<MyCls>();
Console.WriteLine(myGen.GetItem().Name);
}
}
class Genericer<T> where T : new()
{
public T GetItem()
{
return new T();
}
}
public class MyCls
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public MyCls()
{
_name = "CY";
}
}
new的约束指定泛型类声明中的任何类型参数都必须有公共的无参数构造函数。当泛型类型创建类型新实例时,将此约束应用于类型参数。

posted on
浙公网安备 33010602011771号