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

如何在C#嵌套类NestedObject中访问外部类OriginObject的属性?

解决方案

首先明确你的类结构示例(基于描述整理):

public struct Instructions
{
    public string Name { get; set; }
}

public class OriginObject
{
    public Instructions Instruct { get; set; }

    public class NestedObject
    {
        public string GetName()
        {
            // 目标:获取外部OriginObject实例的Instruct.Name
            return string.Empty;
        }
    }
}

要实现Target.GetName()的简洁调用风格,同时避免手动传递外部类实例,最可行的方案是在外部类中封装嵌套类的创建过程,自动注入外部实例引用,具体实现如下:

方案:封装嵌套类初始化,自动关联外部实例

public struct Instructions
{
    public string Name { get; set; }
}

public class OriginObject
{
    public Instructions Instruct { get; set; }
    private NestedObject _nestedInstance;

    // 对外暴露嵌套类实例,调用方直接通过该属性访问
    public NestedObject Target => _nestedInstance ??= new NestedObject(this);

    public class NestedObject
    {
        // 持有外部类实例的引用
        private readonly OriginObject _outerInstance;

        // 构造函数设为internal,确保只有外部类能创建实例
        internal NestedObject(OriginObject outer)
        {
            _outerInstance = outer;
        }

        public string GetName()
        {
            // 直接通过引用访问外部类的属性
            return _outerInstance.Instruct.Name;
        }
    }
}

调用方式

// 创建外部类实例并初始化属性
var origin = new OriginObject 
{ 
    Instruct = new Instructions { Name = "MyInstruction" } 
};

// 完全符合你想要的简洁风格
string name = origin.Target.GetName(); // 返回"MyInstruction"

方案优势

  1. 调用简洁:调用方无需手动传递外部实例,直接通过Target.GetName()调用
  2. 封装性好:嵌套类的构造函数设为internal,避免外部随意创建嵌套类实例,确保每个嵌套实例都关联到正确的外部实例
  3. 性能可靠:避免反射带来的性能损耗和逻辑混乱,直接通过强类型引用访问

关于无引用传递的可行性

如果完全不传递外部类实例的引用,从语言设计角度几乎无法实现:嵌套类的实例和外部类的实例是独立的,没有天然的关联关系,必须通过某种方式建立绑定(要么手动传参,要么封装自动注入)。反射方案虽然能尝试查找关联,但逻辑复杂且容易出错,不推荐在生产代码中使用。

内容的提问来源于stack exchange,提问作者James Jonatah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:40:26