有没有可能在基类中有一个从派生类设置的私有setter而不是公共的

本文关键字:setter 设置 有可能 基类 有一个 派生 | 更新日期: 2023-09-27 18:27:51

是否可以像protected关键字一样,对基类setter进行私有访问,并且只从继承类中使用它?

public class MyDerivedClass : MyBaseClass
{
    public MyDerivedClass()
    {
        // Want to allow MyProperty to be set from this class but not
        // set publically
        public MyProperty = "abc";
    }
}
public class MyBaseClass
{
    public string MyProperty { get; private set; }
}

有没有可能在基类中有一个从派生类设置的私有setter而不是公共的

为什么不使用protected

public string MyProperty { get; protected set; }

受保护(C#参考)

受保护的成员可以在其类内以及通过派生类实例进行访问。

您只需要将setter设置为受保护的,如:

public class MyDerivedClass : MyBaseClass
{
    public MyDerivedClass()
    {
        // Want to allow MyProperty to be set from this class but not
        // set publically
        MyProperty = "abc";
    }
}
public class MyBaseClass
{
    public string MyProperty { get; protected set; }
}

另请参阅访问修饰符(C#参考)

使用protected而不是private。

保护是正确的方法,但为了便于讨论,可以这样设置私有属性:

public class MyDerivedClass : MyBaseClass
{
    public MyDerivedClass() : base(myProperty: "abc") { }
}
public class MyBaseClass
{
    public string MyProperty { get; private set; }
    public MyBaseClass(string myProperty) { 
        this.MyProperty = myProperty;
    }
}