代码改变世界

c# new关键字的作用

2025-03-25 11:54  钟铧若岩  阅读(229)  评论(0)    收藏  举报
在 C# 里,new 关键字有多种用途,下面为你详细介绍:

1. 创建对象实例

new 最常见的用途是创建类、结构体或者数组的实例。当使用 new 关键字时,系统会为对象分配内存空间,并且调用相应的构造函数对对象进行初始化。
using System;

class Person
{
    public string Name;
    public int Age;

    // 构造函数
    public Person(string name, int age)
    {
        Name = name;
        Age = age;
    }
}

class Program
{
    static void Main()
    {
        // 使用 new 关键字创建 Person 类的实例
        Person person = new Person("John", 30);
        Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
    }
}

  

代码解释:
在上述代码中,new Person("John", 30) 语句创建了 Person 类的一个新实例,并且调用了 Person 类的构造函数来初始化对象的 Name 和 Age 属性。

2. 隐藏基类成员

在派生类中,可以使用 new 关键字隐藏基类中具有相同名称的成员(方法、属性、字段等)。
 
using System;

class BaseClass
{
    public void PrintMessage()
    {
        Console.WriteLine("This is the base class.");
    }
}

class DerivedClass : BaseClass
{
    // 使用 new 关键字隐藏基类的 PrintMessage 方法
    public new void PrintMessage()
    {
        Console.WriteLine("This is the derived class.");
    }
}

class Program
{
    static void Main()
    {
        DerivedClass derived = new DerivedClass();
        derived.PrintMessage(); // 调用派生类的方法
        ((BaseClass)derived).PrintMessage(); // 调用基类的方法
    }
}

 

代码解释:
在 DerivedClass 中,new 关键字用于声明一个与基类 BaseClass 中同名的 PrintMessage 方法,从而隐藏了基类的方法。通过不同的对象类型调用该方法,可以看到调用的是不同版本的方法。

3. 泛型约束中的 new() 约束

在泛型类型或方法中,可以使用 new() 约束来要求泛型类型参数必须具有无参数的公共构造函数。这样,在泛型代码中就可以使用 new 关键字来创建该类型的实例。

 

using System;

class MyGenericClass<T> where T : new()
{
    public T CreateInstance()
    {
        return new T();
    }
}

class MyClass
{
    public MyClass()
    {
        Console.WriteLine("MyClass instance created.");
    }
}

class Program
{
    static void Main()
    {
        MyGenericClass<MyClass> generic = new MyGenericClass<MyClass>();
        MyClass instance = generic.CreateInstance();
    }
}

  

代码解释:
在 MyGenericClass<T> 中,where T : new() 约束表明类型参数 T 必须有一个无参数的公共构造函数。在 CreateInstance 方法中,就可以使用 new T() 来创建 T 类型的实例。

4. 创建匿名类型

new 关键字还能用于创建匿名类型,匿名类型是一种临时的数据类型,它可以让你快速定义一个包含一组属性的对象,而无需显式定义一个类。
 
using System;

class Program
{
    static void Main()
    {
        // 创建匿名类型的实例
        var person = new { Name = "Alice", Age = 25 };
        Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");
    }
}

  

代码解释:
在上述代码中,new { Name = "Alice", Age = 25 } 创建了一个匿名类型的对象,该对象包含 Name 和 Age 两个属性。通过 var 关键字来隐式声明变量 person 的类型。