2015-05-29 105 views
-2

我要儘量讓它儘可能清晰!泛型C#沒有拳擊轉換 - 沒有隱式轉換

最終目標是能夠訪問抽象類中的受保護方法。該方法也由抽象類繼承。

抽象類有一個泛型,我需要我的類也是通用的(即創建一個通用適配器)。

這裏是抽象類(類似於結構)。

public abstract class myAbstract<T> : ABaseClass<T> where T : SomeClass 
{ 
} 

這裏是(具有我所需要的方法)上述

public abstract class ABaseClass<T> : AnotherBase, IDisposable where T : SomeClass, SomeClass2 
{ 
    protected void foo(T somevar); 
} 

的類是一個DLL內,即我沒有訪問由抽象類繼承的基類。

這是我正在嘗試做的事情,需要正確的方向幫助!

public MainClass<T> : myAbstract<T> where T : SomeClass 
{ 
    public void somefunct() 
    { 
     this.foo(avariable); 
    } 
} 
+1

「上面的類是一個DLL中,我沒有訪問」 - 這實際上意味着什麼?這些課程是不是真正公開的?他們沒有公共/受保護的構造函數嗎? –

+1

修復了代碼中所有可怕的拼寫錯誤之後,它實際編譯完成。那麼這裏真正的問題是什麼? –

+0

這些類在一個單獨的庫中,我的意思是我沒有訪問源代碼。 @mike z – gmoney

回答

1

你的類應該僅僅是這樣的:

//uncomment ", new()" if you want to create a new instance within the somefunct method 
public class MainClass<T> : myAbstract<T> where T : SomeClass//, new() 
{ 
    //you don't HAVE to pass param if you'd prefer to create it in the method 
    public void somefunct(T param) 
    { 
     //uncomment this (and the ", new()" in the class declaration) 
     //if you want to create a new T instead of passing one in 
     //var instance = new T(); 

     this.foo(param); //or use "instance" from above 
    } 
}