2011-12-30 92 views
1

对不起,令人困惑的标题。基本上,我做了一个BinaryReader在类,在大端读取并设置它的构造起来就是:尝试,抓住内部构造函数,调用基构造器

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

有人告诉我,你不能调用基类的构造函数中的任何其他方式,并认为这是最好的方式做到这一点。

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

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

+0

什么是*基类? .NET框架的一部分或您自己的创作? – Adam 2011-12-30 09:09:30

+2

如果你有Stream,你已经打开了这个文件 - 你在这里试图防范什么?否:在base-ctor调用期间不能添加try/catch。 – 2011-12-30 09:10:07

+0

@MarcGravell,哦,是的,你说得对。我传入一个File.Open(路径)...猜猜我应该看到那个。谢谢你实际上回答这个问题。 – mowwwalker 2011-12-30 09:35:46

回答

1

一种可能的解决方法:使用继承的组合。这样你可以更好地控制初始化基础对象。

+0

参考资料:http://c2.com/cgi/wiki?CompositionInsteadOfInheritance – 2011-12-30 09:13:46

0

我以前从来没有用过它们,所以我希望能够得到它的一些指示。

  • 一般把try /码左右赶上 “去外面” 的东西。你的程序无法控制的事情。获取文件,从数据库中获取内容等。

  • Try-Block尽可能少的代码。例如,在Try中只包含文件获取调用,而不是之后发生的所有事情。 I.E.正如@Marc上面所说的,一旦你拥有一个有效的FileStram对象,将它放入Try块没有意义。

  • 如果你这样做,你可以抓住非常具体的异常类型。这将允许您提供有关该问题的良好错误消息,或者以其他方式处理代码中的问题,以便您的程序不必炸毁。

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

  • 建议:将您的初始Run()包裹在Try中并在Catch块中做一些操作。了解“发布”。例如,您可以发送一封电子邮件给自己。在数据库中填写异常,写入日志文件。

  • 通过上述再到处在应用程序中,始终会重新掷(见我的警告以上)的例外,你有,你用它做什么有用的一个点。

+0

当我尝试初始化try catch语句中的filestream时,它不会让我在其他任何地方使用它,因为它表示它未初始化。当我最初设置为空时也是如此。 – mowwwalker 2011-12-30 22:05:08

+0

不确定“初始化”是什么意思。如果你在try块中声明它,那么它的作用域限于该块。 – radarbob 2012-02-16 22:29:55