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

时间:2010-03-28 20:11:28

标签: c# inheritance override accessor

我甚至不确定这个原则是什么叫什么或如何搜索它,所以我真诚地道歉,如果它已经提出,但最好的方法是做一个例子。

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。对于该对象,它看起来与Properties对象完全相同,但在幕后,MyClass实际上是在计算和修改字段的结果。这种声明方法显然是错误的,因为我无法从GetActualName()定义中访问SetActualName()SubProperties。我将如何实现这样的目标?

2 个答案:

答案 0 :(得分:2)

你在找这样的东西吗?

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;
    }
}

如果要从SubProperties访问MyClass方法,则需要将对MyClass实例的引用传递给SubProperties实例。

答案 1 :(得分:0)

public virtual string Name { get; set; }