这是一个。我有一个基类用于我的所有异常。基类从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()
答案 0 :(得分:1)
是的,你可以在this
中使用base()
,但你可以覆盖Message属性。
public class EBusinessClassExceptions : ApplicationException
{
public override string Message
{
get
{
return this.GetType().ToString();
}
}
}
答案 1 :(得分:0)
这对你有用。从 inside 基类的构造函数中获取派生类的名称。
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);
}