如果我从一个基类继承并希望将继承类的构造函数中的某些东西传递给基类的构造函数,我该怎么做?
例如,
如果我从Exception类继承,我想做这样的事情:
class MyExceptionClass : Exception
{
public MyExceptionClass(string message, string extraInfo)
{
//This is where it's all falling apart
base(message);
}
}
Run Code Online (Sandbox Code Playgroud)
基本上我想要的是能够将字符串消息传递给基本的Exception类.
我试图弄清楚当我调用派生类构造函数时如何调用基类构造函数.
我有一个名为"AdditionalAttachment"类,这是从System.Net.Mail.Attachment.I继承增加了2个属性,我的新类,这样我可以与我的新特性有现有的附件类的所有属性
public class AdditionalAttachment: Attachment
{
[DataMember]
public string AttachmentURL
{
set;
get;
}
[DataMember]
public string DisplayName
{
set;
get;
}
}
Run Code Online (Sandbox Code Playgroud)
之前我曾经创建过类似的构造函数
// objMs是一个MemoryStream对象
Attachment objAttachment = new Attachment(objMs, "somename.pdf")
Run Code Online (Sandbox Code Playgroud)
我想知道如何为我的类创建相同类型的构造函数,它将执行与基类的上述构造函数相同的操作
假设我有一个:
class A {
A(int i);
};
class B : A {
};
Run Code Online (Sandbox Code Playgroud)
我不能实例化B(3),因为没有定义这个构造函数.有没有办法实现一个使用A构造函数的B对象,而不必在所有派生类中添加"普通"代码?谢谢
谢谢
*不是这个问题:在C#中调用基础构造函数*
我知道如何调用this或base链接构造函数.
即便如此,偶尔我最终会得到一个带有许多参数的基础构造函数,以及一个根本不会改变构造函数的派生类.(所有派生类正在改变虚拟方法的一些实现细节.)当发生这种情况时,我仍然需要定义派生构造函数并将所有参数传递给基础构造函数.
问题:是否有任何语法糖说"这个类没有声明它自己的构造函数,它使用了基本构造函数的精确副本."
毫无疑问,params的数量是CodeSmell,我应该尝试修复它或者创建一个ParamObject来保存它们,但这不是问题的主题.
还有很多其他方法可以解决这个问题,我特别感兴趣的是是否存在一种语法让我以这种方式解决它.
我有这个代码:
class Parent
{
public Parent(string someArg)
{
Console.WriteLine("Parent");
}
}
class Child : Parent
{
public Child(string someArg)
{
Console.WriteLine("Child");
}
}
Run Code Online (Sandbox Code Playgroud)
然后我实例化:
var child = new Child("something");
Run Code Online (Sandbox Code Playgroud)
给我一个错误.我知道它与父构造函数有关,但我不确定为什么会这样.base每次我在父级中有一个不是无参数的构造函数时,我是否需要使用?为什么?