让我们在C#中举个例子
public class Foo
{
public Foo() { }
public Foo(int j) { }
}
public class Bar : Foo
{
}
Run Code Online (Sandbox Code Playgroud)
现在,除了构造函数之外,Foo的所有公共成员都可以在Bar中访问.我做不了类似的事情
Bar bb = new Bar(1);
Run Code Online (Sandbox Code Playgroud)
为什么构造函数不可继承?
UPDATE
我知道我们可以链接构造函数,但我想知道为什么上面的构造无效.我相信它应该是有正当理由的.
可能的重复:
构造函数和继承
为什么构造函数不被继承?
当定义继承自基类的类时,我必须重新定义其所有构造函数.我想知道为什么C#不支持从基类的构造函数继承?
我刚看了http://blog.gurock.com/articles/creating-custom-exceptions-in-dotnet/
我不知道什么时候写的.它说:
"遗憾的是,由于C#不继承基类的构造函数,因此这种新类型只具有没有参数的标准构造函数,因此相对无用."
这在2010年也是如此:C#:继承构造函数
这仍然是真的吗?
编辑:继续回答,我确信有一种方法可以绕过默认的无参数构造函数.缺少构造函数继承还有其他原因吗?
我有一个基类,如下所示:
public Data()
{
id = num++;
SetVariables();
}
//fill every Variable varNames, parseInduction, noise, seperator in Children Classes
public Data(String line)
{
//first declare all variables in sub classes
if (id == 0)
throw new NotSupportedException("You are not allowed to use this constructor for creating the first instance!");
id = num++;
SetVariables();
parseLine(line);
}
Run Code Online (Sandbox Code Playgroud)
而且我还有一个扩展这个类的子类。
class DienstGruppe : Data
{
protected override void SetVariables(){
varNames = new String[] {"id", "name"};
parseInduction = "DienstGruppen = {";
parseEnd = "};";
beginOfDataLine …Run Code Online (Sandbox Code Playgroud) 我来自PHP世界,很好奇为什么开发人员选择不添加构造函数(使用arg)继承的方式.从我的观点来看,它违反了DRY原则,重复了很多代码,具体取决于结构.我做了很少的研究 - PHP,Ruby,Python继承了构造函数.Java,C#,C++没有.C++ 0x具有明确定义继承的新功能.
那么程序员没有继承构造函数并且一次又一次地显式编写构造函数会有什么好处吗?
这可能是一个很容易解决的问题.我是一名大学生,我们刚刚开始使用多态,所以这个概念对我来说仍然令人费解.
abstract class IncreaseTransaction
{
private string _Description;
private decimal _Amount;
protected IncreaseTransaction(string description, decimal amount)
{
_Description = description;
_Amount = amount;
}
}
class Deposit : IncreaseTransaction
{
public Deposit(string description, decimal amount) : base("Deposit", amount)
{
}
}
static void Main(string[] args)
{
Customer fred = new Customer("Fred");
SavingsAccount fredSavings = new SavingsAccount();
fredSavings.AddTransaction(new Deposit(500.00M));
}
Run Code Online (Sandbox Code Playgroud)
当实例化新存款时,我希望将文字字符串"存款"用作交易的描述.但是,我收到一条错误,指出'SampleNamespace.Deposit不包含一个带有一个参数的构造函数'.所以,字符串没有被继承,我不确定如何解决这个问题.我非常感谢任何帮助!