C# 从私有类继承时的公共属性用法

C# 从私有类继承时的公共属性用法,c#,inheritance,properties,C#,Inheritance,Properties,我有三个类,它们有许多公共属性,因此我生成了一个基类,它们从中继承: 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 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
。是否可以将其保持为私有,但仍可以制作一些允许使用的东西,如下面所示

Config1 c1;
TimeSpan ts1 = c1.Period1;

不能将类
设为私有
内部
是非嵌套类的最严格的修饰符


此外,您不能对子类的访问权限限制小于父类,因此对于
CommonConfig
,您必须坚持使用
public
internal
作为非嵌套类的最严格的修饰符


此外,您不能访问比父类限制性更小的子类,因此您必须坚持使用
public
来访问
CommonConfig

不您不能,因为要访问该类的属性,您需要指定它
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
。如果要隐藏它,必须在另一个类中声明该类

不可以,为了能够访问该类的属性,您需要将其指定为
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
。如果要隐藏它,必须在另一个类中声明该类

不,你不能把它当作私人的。 不能访问具有公共属性的私有类。
必须指定公共类

否不能将其设置为私有类。 不能访问具有公共属性的私有类。 您必须指定公共类

如何

public class CommonConfig
{
    public TimeSpan Period1 {get; protected set;}
{
如果需要,您还可以保护整个属性…

怎么样

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

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

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


有关更多详细信息。

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


有关详细信息。

您不能更改类层次结构的可访问性。试想一下,如果基类是私有的或内部的,而派生类是公共的,那么客户机代码如何访问基类?答案是它不能。你不能。您必须将
CommonConfig
保持为
public
您不能更改类层次结构的可访问性。试想一下,如果基类是私有的或内部的,而派生类是公共的,那么客户机代码如何访问基类?答案是它不能。你不能。除非是嵌套在另一个类中的类,否则必须将
CommonConfig
保持为
public
class@SamLeach没错,我修改了答案,除非它是嵌套在另一个类中的类class@SamLeach是的,我修改了我的答案