开发者

In C#, can I hide/modify accessors in subclasses?

开发者 https://www.devze.com 2022-12-24 05:13 出处:网络
I\'m not even sure what this principl开发者_高级运维e is called or how to search for it, so I sincerely apologize if it has been brought up before, but the best way to do it is with an example.

I'm not even sure what this principl开发者_高级运维e is called or how to search for it, so I sincerely apologize if it has been brought up before, but the best way to do it is with an example.

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

The idea is to have any object that instantiates MyClass have a fully accessible property ClassProperties. To that object, it would look exactly like a Properties object, but behind the scenes, MyClass is actually computing and modifying the results of the fields. This method of declaration is obviously wrong since I can't access GetActualName() and SetActualName() from within the SubProperties definition. How would I achieve something like this?


Are you looking for something like this?

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

You need to pass a reference to a MyClass instance to the SubProperties instance if you want to access MyClass methods from SubProperties.


public virtual string Name { get; set; }
0

精彩评论

暂无评论...
验证码 换一张
取 消