超类构造函数将子类名作为字符串获取
本文关键字:字符串 获取 构造函数 子类 超类 | 更新日期: 2023-09-27 18:10:02
这里有一个。我有一个基类来处理所有的异常。基类根据类名从app.config中检索一条消息。因此,如果我有10个异常,那么app.config中就有10条消息。
// EBusinessClassExceptions inherits from ApplicationException
public EBusinessClassExceptions(string msgType, params object[] objects)
: base(string.Format(exceptionMessagesServices.GetMessage(msgType), objects))
{
}
所以msgType是要查找的异常的类名。
一个示例子类是:
// sub class
public class EHiddenFromWebException : EBusinessClassExceptions
{
public EHiddenFromWebException(int sampleID)
: base("EHiddenFromWebException", sampleID)
{
}
}
但是我不喜欢的是我必须使用类名作为字符串的方式。所以一个更好的版本是:
// sub class
public EHiddenFromWebException(int sampleID)
: base(typeof(EHiddenFromWebException).Name, sampleID)
{
}
这样我就不必将类名作为字符串列出,编译器会验证类名。但是如果我有10个异常,每个异常的构造函数都是一样的——它只是这样做:
typeof(thisClass).Name
我想写的只是:
// sub class
public EHiddenFromWebException(int sampleID)
: base(sampleID)
{
}
并且在父构造函数中有typeof。但是要做到这一点,父构造函数必须确定子类的类名。这就是我被困住的地方……
如果这是一个实例方法,我可能会使用这个,但我卡住了,因为它是一个构造函数。
编辑-注意你不能从内部使用"this":base(),我认为我需要调用父构造函数
你不能在base()
中使用this
,但是你可以覆盖Message属性。
public class EBusinessClassExceptions : ApplicationException
{
public override string Message
{
get
{
return this.GetType().ToString();
}
}
}
这将为您工作。从基类的构造函数中的获取派生类的名称。
public class EBusinessClassExceptions
{
public EBusinessClassExceptions(int sampleID)
{
Type type = GetType();
string name = type.Name;
Console.WriteLine("Im gonna get an exception message for {0} with sample {1}", name, sampleID);
}
}
public class EHiddenFromWebException : EBusinessClassExceptions
{
public EHiddenFromWebException(int sampleID) : base (sampleID)
{
}
}
public static void Main()
{
EHiddenFromWebException ex = new EHiddenFromWebException(123);
}