You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:01:12