[英]C#: Inheritance and IDisposable - strange issue
任何人都可以幫忙,我有一個小問題,當我嘗試執行操作時,我有一個界面以及一個基本界面
.Dispose()
它找不到在我的子類NOT base上實現的方法,而且它似乎總是想調用該方法-即使我將命名空間專門放在構造函數的參數前面。
這里有一些代碼可以更好地解釋它,基本上有2個IhouseRepository(接口),1個是基本接口,一個是子類接口。
在構造函數中,我專門說過它的MarkSmith.Data(而不是MarkSmith.DataBase),但是它會繼續使用未實現Dispose的DataBase版本。
我的想法是在所有子類中實現IDisposable,並且應該負責處理。
在構造函數中,我放了一行調用IhouseRepository的行,並且我通過“ CAN”訪問Dispose-這樣就可以了-為什么在不傳遞給構造函數的參數上在這里起作用,這是一個謎:-)
但是構造函數上的參數似乎正在強制命名空間DataBase而不是Data
我想我可以將基礎項目上的所有接口重命名為IHouseRepositoryBase,但是我不明白為什么會這樣。
任何幫助真的很感激
public class HouseService : ServiceBase.HouseService, IHouseService
{
public HouseService(MarkSmith.Data.IHouseRepository repository)
: base(repository)
{
MarkSmith.Data.IHouseRepository test =
new MarkSmith.Data.HouseRepository(new MyDataContext);
test.Dispose(); // THIS WORKS! NO PROBLEMS
}
// Dispose() calls Dispose(true)
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
// free managed resources
if (repository != null)
{
repository.Dispose(); // THIS FAILS .. IT IS CALLING NS DATABASE
}
}
重載的Dispose()
方法不需要是virtual
以便子類可以覆蓋其實現嗎? 否則,最終被調用的方法將取決於您通過其調用的接口。
另外,如果要求所有子類都實現IDisposable
,則基類也應實現IDisposable
-這使編譯器強制實施它。
如果遵循推薦的模式,則HouseRepository中的Dispose方法不是虛擬的。 這意味着將要調用的是靜態決定的編譯時間,具體取決於您用於訪問它的變量的類型-而不是變量中實例的類型。
這只是一般性的考慮,但是這是我所能做的,因為在您的代碼示例中不存在存儲庫的成員定義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.