2011-12-30 100 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