C#技术疑问:未实例化的Kid对象为何可调用属性与方法?
C#构造函数中未显式实例化却能调用对象成员的原因
- 你看到的
kd并不是未初始化的局部变量,它是Toy类构造函数的参数,类型为Kid。在创建Toy对象时,必须提前实例化好一个Kid对象并传入构造函数(比如new Toy(new Kid())),所以构造函数内部的kd其实是指向这个已实例化的Kid对象的引用,自然可以调用它的属性和方法。 - 而你在Main方法中直接写
kd.MyToys()报错,是因为这里的kd是未赋值的局部变量,C#编译器会严格检查局部变量的初始化状态,不允许使用未指向任何对象实例的引用调用成员。
举个对应代码示例:
public class Kid { public string nameKid { get; set; } public void MyToys() { Console.WriteLine("正在玩玩具"); } } public class Toy { // kd是构造函数的参数,调用时必须传入已实例化的Kid对象 public Toy(Kid kd) { // 这里的kd已经指向传入的Kid实例,所以可以正常调用成员 kd.nameKid = "小方"; kd.MyToys(); } } class Program { static void Main() { // 正确用法:先实例化Kid,再传入Toy构造函数 Kid myKid = new Kid(); Toy myToy = new Toy(myKid); // 错误用法:局部变量kd未初始化,编译器报错 // Kid kd; // kd.MyToys(); } }
内容的提问来源于stack exchange,提问作者gianestras
相关产品推荐
相关产品推荐

