在C#中,使用new
操作符可以实例化一个对象,即创建一个对象实例。new
操作符有以下几个工作机制:
-
分配内存空间:
new
操作符会在内存中为对象分配一定的空间。这个空间包括对象的所有成员变量以及对象所继承的基类的成员变量。 -
调用构造函数:一旦分配了内存空间,在内存中创建了对象,
new
操作符会调用对象的构造函数,进行对象的初始化。 -
返回对象引用:在对象被创建并初始化后,
new
操作符会返回对象的引用,即指向对象内存空间的指针。
下面是一个示例说明:
public class Person
{
public int Age;
public string Name;
public Person()
{
Age = 0;
Name = "Unknown";
}
public Person(int age, string name)
{
Age = age;
Name = name;
}
}
public class Program
{
static void Main(string[] args)
{
// 实例化对象
Person p1 = new Person();
Person p2 = new Person(18, "Tom");
// 修改对象属性
p1.Age = 20;
p1.Name = "Kate";
// 输出对象属性
Console.WriteLine("p1's age: {0}, name: {1}", p1.Age, p1.Name);
Console.WriteLine("p2's age: {0}, name: {1}", p2.Age, p2.Name);
Console.ReadLine();
}
}
在这个示例中,我们创建了Person
类,并实例化了两个Person
对象p1
和p2
。p1
对象使用了无参构造函数进行初始化,p2
对象使用了有参构造函数进行初始化。然后,我们修改了p1
对象的属性值,并输出了两个对象的属性值。
另一个示例是在继承关系中使用new
操作符:
public class Animal
{
public void Move()
{
Console.WriteLine("Animal is moving.");
}
}
public class Dog : Animal
{
public new void Move()
{
Console.WriteLine("Dog is running.");
}
}
public class Program
{
static void Main(string[] args)
{
Animal animal = new Animal();
animal.Move(); // 输出:Animal is moving.
Dog dog = new Dog();
dog.Move(); // 输出:Dog is running.
Animal dog2 = new Dog();
dog2.Move(); // 输出:Animal is moving.
Console.ReadLine();
}
}
在这个示例中,我们定义了Animal
类,并定义了Move
方法。然后,我们定义了一个继承Animal
类的Dog
类,并在Dog
类中使用new
操作符重新定义了Move
方法。最后,我们创建了一个Animal
对象和一个Dog
对象,并分别调用它们的Move
方法。Dog
对象的Move
方法输出了Dog is running.
,而Animal
对象的Move
方法输出了Animal is moving.
。当我们用Animal
类型的变量引用Dog
对象并调用Move
方法时,输出Animal is moving.
,这是因为new
操作符只是在Dog
类中声明了Move
方法的新实现,而不是覆盖了从Animal
类继承来的Move
方法。因此,在这种情况下,Dog
对象的Move
方法和Animal
类的Move
方法是两个不同的方法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中new操作符的工作机制 - Python技术站