【问题标题】:Public properties usage when inherited from private class从私有类继承时使用公共属性
【发布时间】:2014-04-03 10:39:02
【问题描述】:

我有三个具有许多共同属性的类,所以我生成了一个基类,它们从中继承:

public class CommonConfig
{
   public TimeSpan Period1 { get; private set; }
   public TimeSpan Period2 { get; private set; }
   public TimeSpan Period3 { get; private set; }
};

public class Config1 : CommonConfig
{
   public long count1 {get; private set; }
}

public class Config2 : CommonConfig
{
   public long count2 {get; private set; }
}

我不确定我是否想让CommonConfig 成为public。是否可以保留它private,但仍然可以制作一些允许使用的东西,如下所示。

Config1 c1;
TimeSpan ts1 = c1.Period1;

【问题讨论】:

  • 您无法更改类层次结构的可访问性。想想看,如果基类是私有的或内部的,而派生类是公共的,那么客户端代码如何访问基类呢?答案是不能。
  • 没有。你不能。您必须将CommonConfig 保留为public

标签: c# inheritance properties


【解决方案1】:

不可以,要能够访问该类的属性,需要指定public,不能指定private属性为public的类。

Config1 c1;
TimeSpan  ts1 = c1.Period1; // THIS PROPERTY HS TO BE PUBLIC 

如果你

//MISMATCH BETWEEN CLASS AND ITS PROPERTIES ACCESS MODIFIERS
private class CommonConfig {
    public TimeSpan Period1 { get; private set; }
    public TimeSpan Period2 { get; private set; }
    public TimeSpan Period3 { get; private set; }

}

甚至更多,你会得到编译器错误:

命名空间中定义的元素不能显式声明为 私有的、受保护的或受保护的内部

在“顶级”级别(命名空间级别)定义一个类时,您必须声明它public。如果你想隐藏它,你必须在另一个类中声明该类

【讨论】:

    【解决方案2】:

    你不能创建一个类privateinternal 是非嵌套类的最严格的修饰符。

    此外,您不能访问比父类限制较少的后代类,因此您必须坚持使用public 来获取CommonConfig

    【讨论】:

    • 除非它是嵌套在另一个类中的类
    • @SamLeach 是的,我修改了我的答案
    【解决方案3】:

    不,您不能将其设为私有。 您无法使用公共财产访问私人课程。 你必须指定公共类

    【讨论】:

      【解决方案4】:

      如果您的目标是防止直接使用 CommonConfig 类,您可以将 CommonConfig 类以及其中的属性标记为 abstract(根据需要)。 这样,虽然类是可见的,但使用它的唯一方法是通过 Config1Config2

      See this 了解更多详情。

      【讨论】:

        【解决方案5】:

        怎么样

        public class CommonConfig
        {
            public TimeSpan Period1 {get; protected set;}
        {
        

        如果需要,您还可以保护整个属性...

        【讨论】:

          猜你喜欢
          • 2011-01-05
          • 2011-03-11
          • 2011-08-10
          • 1970-01-01
          • 2017-06-19
          • 2011-05-31
          • 1970-01-01
          相关资源
          最近更新 更多