如何在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"
方案优势
- 调用简洁:调用方无需手动传递外部实例,直接通过
Target.GetName()调用 - 封装性好:嵌套类的构造函数设为
internal,避免外部随意创建嵌套类实例,确保每个嵌套实例都关联到正确的外部实例 - 性能可靠:避免反射带来的性能损耗和逻辑混乱,直接通过强类型引用访问
关于无引用传递的可行性
如果完全不传递外部类实例的引用,从语言设计角度几乎无法实现:嵌套类的实例和外部类的实例是独立的,没有天然的关联关系,必须通过某种方式建立绑定(要么手动传参,要么封装自动注入)。反射方案虽然能尝试查找关联,但逻辑复杂且容易出错,不推荐在生产代码中使用。
内容的提问来源于stack exchange,提问作者James Jonatah
相关产品推荐
相关产品推荐

