如何访问派生类中的私有集属性[重复]
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 是私有的。
抱歉,我错过了私人套装。我已经相应地更新了它以上是关于如何访问派生类中的私有集属性[重复]的主要内容,如果未能解决你的问题,请参考以下文章