如何封装C#嵌套类PositionXYT,使其仅被Root类使用且属性保持公开?
实现PositionXYT的封装,仅让Root类访问它,同时保持Root的positionXYT属性公开
可以实现这个需求,核心思路是用公开接口暴露属性成员,同时将PositionXYT设为Root的私有嵌套类,这样外部无法直接访问PositionXYT类,只能通过接口操作Root的公开属性。
具体代码实现
// 定义公开接口,暴露需要外部访问的成员 public interface IPositionXYT { int X { get; set; } int Y { get; set; } int Theta { get; set; } } public class Root { public string OrderId { get; set; } public int OrderUpdateId { get; set; } // 公开属性使用接口类型 public IPositionXYT PositionXYT { get; set; } // 将PositionXYT设为私有嵌套类,仅Root内部可访问 private class PositionXYT : IPositionXYT { public int X { get; set; } public int Y { get; set; } public int Theta { get; set; } } // 可选:在Root内部提供创建PositionXYT实例的方法 public void SetPosition(int x, int y, int theta) { PositionXYT = new PositionXYT { X = x, Y = y, Theta = theta }; } }
效果说明
- 外部代码无法直接实例化或引用
Root.PositionXYT类(因为它是私有嵌套类),完全实现了对PositionXYT的封装,仅Root类能使用它。 Root的PositionXYT属性保持公开,外部可以通过IPositionXYT接口正常访问X、Y、Theta成员,满足业务需求。
补充:如果无需外部访问PositionXYT的成员
如果外部只需要知道Root有这个属性,但不需要操作它的内部成员,也可以将PositionXYT设为私有嵌套类,同时把Root的PositionXYT属性类型改为object,但这种场景实用性较低,因为外部拿到object类型后无法直接操作成员,通常还是推荐接口方案。
内容的提问来源于stack exchange,提问作者fuba
相关产品推荐
相关产品推荐

