1、new 运算符
new
关键字最常见的用途是创建一个类的实例。当使用 new 创建对象时,它为对象分配内存并调用构造函数来初始化该对象。例如,
StringBuilder str=new StringBuilder();
创建匿名类型:
var person = new { Name = "cjavapy", Age = 5 };
2、new 修饰符
在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。简单的说,就是现在写的这个类,想写一个和基类中相同的成员,而不继承基类的。运用多态的特性时,也不会调用这个显示隐藏的方法。具体看下如下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
public class Program
{
static void Main(string[] args)
{
animal a = new animal();
a.name = "animal";
a.say();
cat c = new cat();
c.name = "cat";
c.say();
dog d = new dog();
d.name = "dog";
d.say();
sheep s = new sheep();
s.name = "sheep";
s.say();
animal a1 = new cat();
a1.say();
animal a2 = new dog();
a2.say();
animal a3 = new sheep();
a3.say();
}
}
class animal
{
public string name { get; set; }
public virtual void say()
{
Console.WriteLine("animal say");
}
}
class cat : animal
{
public override void say()
{
Console.WriteLine("cat say");
}
}
class dog : animal
{
public new void say() //这个方法被显示隐藏了
{
Console.WriteLine("dog say");
}
}
class sheep : animal
{
}
}
3、new 约束
用于在泛型声明中约束可能用作类型参数的参数的类型。举个例子看一下,泛型类中T要求有一个无参的构造函数,代码如下,
using System;
using System.Collections.Generic;
namespace ConsoleApplication2
{
public class Employee
{
private string name;
private int id;
public Employee()
{
name = "Temp";
id = 0;
}
public Employee(string s, int i)
{
name = s;
id = i;
}
public string Name
{
get { return name; }
set { name = value; }
}
public int ID
{
get { return id; }
set { id = value; }
}
}
class ItemFactory where T : new()
{
public T GetNewItem()
{
return new T();
}
}
public class Test
{
public static void Main()
{
ItemFactory EmployeeFactory = new ItemFactory();
////此处编译器会检查Employee是否具有公有的无参构造函数。
//若没有则会有The Employee must have a public parameterless constructor 错误。
Console.WriteLine("{0}'ID is {1}.", EmployeeFactory.GetNewItem().Name, EmployeeFactory.GetNewItem().ID);
}
}
}