如何访问派生类中的私有集属性[重复]

Posted

技术标签:

【中文标题】如何访问派生类中的私有集属性[重复]【英文标题】:How to access private set properties in derived class [duplicate] 【发布时间】:2015-03-22 17:39:11 【问题描述】:

我有一个简单的继承情况如下:

我希望能够从 Class1 设置 Class2 中的属性,但事实并非如此。有没有办法设置对 Class 2 中的属性的访问,使它们像受保护的变量一样起作用?

public abstract class Class2

    public DateTime Added  get; private set; 
    public int ID  get; private set; 


public class Class1 : Class2

    public string ImageFilename  get; set; 
    public string LinkText  get; set; 

【问题讨论】:

您是否尝试过将集合设为受保护? protected 请定义“像受保护的变量一样”,因为这可能意味着很多。您是否希望无法从Class2 及其继承链外部访问这些属性?您是否希望该属性可公开获取,但受保护可设置?等等。请分享您的研究。 "so they act like protected variables" - 我不明白...如果你知道protected 是什么,你为什么不使用它?这个问题还有更多你没有解释的地方吗? 【参考方案1】:

您需要将它们设置为protected,而不是private。这使您可以从派生类而不是外部类访问它。

public abstract class Class2

    protected DateTime Added  get; set; 
    protected int ID  get; set; 


public class Class1 : Class2

    public string ImageFilename  get; set; 
    public string LinkText  get; set; 

    public Class1()
    
        //You can set the variables from inside Class 1.
        base.Added = DateTime.Now();
        base.ID = 1;
    

如果您希望属性仍然对外公开,​​但作为只读,您可以将各个 setter 设置为受保护:

public abstract class Class2

    public DateTime Added  get; protected set; 
    public int ID  get; protected set; 

【讨论】:

啊,你每天都会学到一些东西——作为一个菜鸟,你做得很好! 但是您的示例代码仍然将它们作为private 您的二传手仍然是私人的。你所做的只是降低公共成员的可见性,这是​​一个重大变化。 这将使 getter 受到保护,但 setter 是私有的。 抱歉,我错过了私人套装。我已经相应地更新了它

以上是关于如何访问派生类中的私有集属性[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C ++:如何在派生类中定义基类构造函数,如果基构造函数具有带有私有成员的初始化列表[重复]

派生类中的抽象方法覆盖,如何使私有

继承与派生

C#中继承类为啥可以通过属性访问基类的私有字段。

C#访问派生类中的受保护成员[重复]

打字稿:使父类中的公共方法成为派生类中的私有/受保护方法