C#中new关键字很熟悉吧,某种意义上是用得最多的关键,我们常用的是创建一个新的对象实例。其实它还有两种用法,一是可以作为New关键字修饰,二是New可以作为泛型中的约束来使用,下面我们来看看三种的具体使用。
一、NEW关键字作为运算符
new运算符创建类型的新实例,就是通常我们调用一个类、创建一个数组、匿名类型实例化等。如下:
//new一个配置类
var configuration = new ConfigurationBuilder();
//创建一个字典
var dict = new Dictionary<string, int>();
dict["first"] = 10;
//创建数组
var numbers = new int[3];
numbers[0] = 10;
//匿名类型实例化
var example = new { Greeting = "Hello", Name = "World" };
二、NEW关键字作为修饰符
在作为修饰符时,New关键字可以显示隐藏在基类继承的成员,也就是在实现多态时,子类添加上new关键字时,再用父类实例化不会调用子类。如下例子:
//新建父类
class people
{
public string name { get; set; }
public virtual void say()
{
Console.WriteLine("hello people");
}
}
//男人
class man : people
{
public override void say()
{
Console.WriteLine("hello man");
}
}
//女人
class woman : people
{
//这个方法被显示隐藏了
public new void say()
{
Console.WriteLine("hello woman");
}
}
static void Main(string[] args)
{
//这里不影响调用
woman w = new woman();
w.name = "小花";
w.say();
//这里隐藏了子类,会调用父类
people p = new woman();
p.name = "小花";
p.say();
//这里优先调用子类 如果找不到重写会调用父类
people p2 = new man();
p2.name = "小王";
p2.say();
}
打印结果如下:
三、NEW关键字作为泛型中约束
约束 new 指定泛型类或方法声明中的类型参数必须具有公共无参数构造函数。若要使用 new 约束,则该类型不能为抽象类型。如下实例
//新建一个类
public class People
{
private string name;
private int id;
public People()
{
name = "张山";
id = 0;
}
public People(string _name, int _id)
{
name = _name;
id = _id;
}
public string Name
{
get { return name; }
set { name = value; }
}
public int ID
{
get { return id; }
set { id = value; }
}
}
//使用new约束
class ItemFactory<T> where T : new()
{
public T GetNewItem()
{
return new T();
}
}
//输出
static void Main(string[] args)
{
ItemFactory<People> PeopleFactory = new ItemFactory<People>();
//此处编译器会检查Employee是否具有公有的无参构造函数。否则会报错
Console.WriteLine("{0}'ID is {1}.", PeopleFactory.GetNewItem().Name, PeopleFactory.GetNewItem().ID);
}
//打印结果为:张山'ID is 1.
结语
本文介绍了new关键字的三种用法,欢迎大家留言讨论。
参考:微软官网
点击下方卡片关注DotNet NB
一起交流学习
▲ 点击上方卡片关注DotNet NB,一起交流学习
请在公众号后台