1

我什至不知道这个原则叫什么或如何搜索它,所以如果以前有人提出过,我很抱歉,但最好的方法是举个例子。

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

4

2 回答 2

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 实例。

于 2010-03-28T20:16:16.303 回答
0
public virtual string Name { get; set; }
于 2010-03-28T20:16:07.980 回答