C#继承和例外文本

时间:2014-04-23 06:56:57

标签: c# exception inheritance

美好的一天!

我创建了两个类:

class A
{
  public A(String name) {}
  public void Func1()
  {
      try 
      {...}
      catch(Exception ex)
      {
        Console.WriteLIne("Error at Func1 of class A"+Ex.Message);
      }
  }
}

class B:A
{
   public B()  {}
}

在Main():

B b=new B(String name);
b.Func1();

当Exception出现时 - 得到这样的错误:" A类Func1"错误! 所以,这让我很困惑。

如何修复它?我应该覆盖A类的每个功能,并且这样做:

void override Func1()
{
  try {
    _a.Fun1();
  }
  catch(Exception ex)
  {//My text of exception}
}

还是命令界面? 拜托,告诉我!

谢谢!

1 个答案:

答案 0 :(得分:1)

覆盖是一种选择,但它很奇怪。

相反,您可以使用this.GetType()获取您实际所在类型的名称:

Console.WriteLine("Error at class " + GetType().Name + ": " + Ex.Message);

然而,这是一种奇怪的异常处理模式。首先,您打印出来的信息是异常的堆栈跟踪,无需手动编写方法的名称等等。真的,它有点冗长,但通常是很有用。

当然,如果你仍然想要遵循这种模式,你不必手动写出方法的名称:

"Method " + MethodBase.GetCurrentMethod().Name + ", class " + GetType().Name

这里的要点是,您的B类型没有方法Func1 - 它只对A的方法Func1进行虚拟调度,参考自己。由于GetType()可以获得给定实例的实际类型(在本例中为this),因此即使在从基类继承的类中也可以获得所需的内容。

覆盖所有类中的所有方法并替换它们的整个代码会完全破坏继承的目的,不是吗?