我什至不确定这个原则是什么,或者如何搜索它,所以如果以前提出了这个原则,我真诚道歉,但是最好的方法就是一个例子。

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() 从内部 SubProperties 定义。我将如何实现这样的目标?

有帮助吗?

解决方案

您在寻找这样的东西吗?

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实例的引用传递给子专业实例。

其他提示

public virtual string Name { get; set; }
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top