在C#中,我可以在子类中隐藏/修改访问器吗?

在C#中,我可以在子类中隐藏/修改访问器吗?,c#,inheritance,overriding,accessor,C#,Inheritance,Overriding,Accessor,我甚至不知道这个原则叫什么,也不知道如何寻找它,所以如果以前有人提出过,我真诚地道歉,但最好的方法是举个例子 class Properties { public string Name { get; set; } } class MyClass { class SubProperties: Properties { public override Name { get { return GetActualName();

我甚至不知道这个原则叫什么,也不知道如何寻找它,所以如果以前有人提出过,我真诚地道歉,但最好的方法是举个例子

class Properties
{
  public string Name { get; set; }
}

class MyClass
{
    class SubProperties: Properties
    {
        public override Name
        {
            get { return GetActualName(); }
            set { SetActualName(value); }
        }
    }

    public SubProperties ClassProperties;

    private string GetActualName()
    {
        return SomeFunction();
    }

    private void SetActualName(string s)
    {
        ClassProperties.Name = SomeOtherFunction(s);
    }
}

其思想是让任何实例化了
MyClass
的对象都有一个完全可访问的属性
ClassProperties
。对于该对象来说,它看起来就像一个属性对象,但在幕后,MyClass实际上是在计算和修改字段的结果。这种声明方法显然是错误的,因为我无法从
子属性定义中访问
GetActualName()
SetActualName()
。我怎样才能实现这样的目标?

你在寻找这样的目标吗

public virtual string Name { get; set; }
abstract class Properties
{
    public abstract string Name { get; set; }
}

class MyClass
{
    private class SubProperties : Properties
    {
        private MyClass myClass;

        public SubProperties(MyClass myClass)
        {
            this.myClass = myClass;
        }

        public override Name
        {
            get { return this.myClass.GetActualName(); }
            set { this.myClass.SetActualName(value); }
        }
    }

    private string name;

    public MyClass
    {
        this.MyClassProperties = new SubProperties(this);
    }

    public Properties MyClassProperties { get; private set; }

    private string GetActualName()
    {
        return this.name;
    }

    private void SetActualName(string s)
    {
        this.name = s;
    }
}

如果要从子属性访问MyClass方法,需要将对MyClass实例的引用传递给Subperties实例。

这看起来像是我想要的,我来试试。唯一真正的区别是,在我的例子中,MyClass中没有私有变量“name”-它实际上是对套接字的读/写,但我想对调用对象完全隐藏它。谢谢