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

如何封装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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 16:21:11