关于私有,公共和受保护构造函数的抽象类的一些问题

我的第一个问题:抽象类中的protected和public构造函数之间有什么区别?

我的第二个问题:如果抽象类有一个私有构造函数,它是否有意义?

提前致谢!

一种可能的设计,它将在抽象类上使用私有构造函数:

public abstract class BaseClass { private BaseClass(Object param) { //Do something with parameters } //Provide various methods that descendant classes will know how to perform public static BaseClass FromObject(Object value) { //Based on object, choose which type of derived class to construct... } private class HiddenDerivedA : BaseClass { public HiddenDerivedA(Object value) : base(value) { } } private class HiddenDerivedB : BaseClass { public HiddenDerivedB(Object value) : base(value) { } } } 

如果派生的实现与用于构造它们的选择逻辑紧密耦合,并且您希望提供与其余代码的高度绝缘,则此模式非常有用。 它使您免除了除了您明确指定的那些之外必须支持其他inheritance者的责任,并允许您将所有私有状态从基类公开到派生类。

问题#1:不多。 无论如何,你不能直接调用抽象类的构造函数(实例化它)。 您只能从子类中调用一个,这意味着您当然可以访问受保护的成员以及公共成员。

问题2:不,没有多大意义。 抽象类上的私有构造函数只能通过“构造函数链接”从同一个类中的非私有构造函数调用。

  1. 很少。 公共构造函数只能用作受保护的构造函数。

  2. 是的,可以使用来自其他(受保护/公共)构造函数的this关键字调用它(’sideways’)。

为了澄清我的第一个问题,我将再次回答(不予评论)。 所以,我知道直接实现抽象类是不可能的。 只有当一个类派生自abstarct类时,才能实现。 我知道一个类可以有私有,公共,内部和受保护的构造函数。 我知道,保护意味着什么。

但是抽象类中公共受保护构造函数之间的区别是什么。 我看不出那两个人之间的区别。

对我来说似乎没有太大区别,以下代码输出


酒吧

 public abstract class Foo { protected Foo() { Console.WriteLine ("Foo"); } } public class Bar : Foo { public Bar() { Console.WriteLine ("Bar"); } } void Main() { new Bar(); } 

如果受保护,则不能覆盖抽象构造函数。 不确定如果我回答你的问题:-)