尝试,在调用基础构造函数的构造函数中捕获

时间:2011-12-30 09:05:57

标签: c# constructor try-catch

很抱歉这个令人困惑的标题。基本上我创建了一个BinaryReader类,它读入大端并将其构造函数设置为:

BinaryReader2(System.IO.Stream strm) : base(strm){}

我被告知你不能以任何其他方式调用基类的构造函数,这是最好的方法。

问题是,当另一个程序控制我正在尝试读取的文件时,它不会显示任何错误消息(因为我是编程新手并且没有设置任何try catch语句。 )。所以,我试图通过使用try-catch语句来解释所有可能的情况。我之前从未使用过它们,所以我希望能得到它的一些指示。

我在整个程序的许多地方创建了binaryreader2类,希望我可以在binaryreader类本身内设置try catch,而不是在我使用它的每个地方。是否可以这样做并仍然调用基类的构造函数?

2 个答案:

答案 0 :(得分:1)

一种可能的解决方法:使用组合而不是继承。通过这种方式,您可以更好地控制初始化以前的基础对象。

答案 1 :(得分:0)

  

我之前从未使用过它们,所以我希望能得到一些指示。

  • 一般情况下,将Try / Catch放在“外出”的代码中。你的程序无法控制的东西。获取文件,从数据库中获取内容等

  • 尝试阻止尽可能少的代码。例如,在Try中包装文件提取调用,而不是之后发生的所有事情。 I.E.正如@Marc上面所说,一旦你拥有一个有效的FileStram对象,就没有必要把它放在Try块中。

  • 如果您执行上述操作,则可以捕获非常具体的异常类型。这将允许您提供有关问题的良好错误消息,或以其他方式处理代码中的问题,以便您的程序不必只是爆炸。

  • 仔细研究重新抛出原始异常副之间抛出新异常实例的区别。

  • 建议:在Try和Catch块中包装你的初始Run()。了解“发布”。例如,您可以向自己发送电子邮件。在数据库中填充异常,写入日志文件。

  • 使用上面的应用程序中的每个 Catch ,总是重新抛出(请参阅上面的警告)异常并且您只有一个点你用它做一些有用的事情。