2015-08-14 58 views
-4

我有一個支持項目。有這樣的控制層級:無法訪問繼承類中的屬性

public class MyWindowControl : MyControl<WindowControl> 

MyControl有這樣的層次:

public abstract class MyControl<T> : MyElement<T> where T : Control, new() 

我做修復在WindowControl,並停留在一個情況,那是我需要的屬性時,裏面的MyControl ,名爲 - Token

我需要得到它,但我沒有辦法看到。有沒有辦法,也許我可以將它作爲參數傳遞給構造器?但是如何?

下面是一個例子:

public class MyWindowControl : MyControl<WindowControl> 
{ 
    public MyWindowControl() 
    { 

    } 
} 

public abstract class MyControl<T> : MyElement<T> where T : Control, new() 
{ 
    public MyControl() : 
     this(new T()) 
    { 
    } 

    public MyControl(T Element) : 
     base(Element) 
    { 
    } 
} 

public abstract class MyElement<T> : MyScreenElement where T : FrameworkElement, new() 
{ 
    public MyElement() : 
     this(new T()) 
    { 
    } 

    public MyElement(T Element) 
    { 
    } 
} 

public abstract class MyScreenElement 
{ 
    public MyClass Token { get; protected set; } 
} 

所以問題是,我可以訪問MyControl裏面的道理,但不是WindowControl內。我怎麼能在這種情況下作爲參數傳遞或設置爲WindowControl類對象內的令牌值屬性?

請仔細看:我想不能訪問的MyWindowControl令牌屬性,但在WindowControl

又一次。在代碼的當前結構中,我需要在WindowControl類中擁有一個令牌副本。而且我問有沒有辦法做到這一點或任何解決方法?

我不知道,也許:

public class MyWindowControl : MyControl<WindowControl(this.Token)> 
+0

如果可能,請提供更多詳細信息和代碼示例。 'WindowControl'具有'Token'屬性,你只需要獲取它,或者你需要將該屬性添加到類定義中嗎?你在說什麼構造函數?或者你是否試圖從'WindowControl'訪問'MyControl '的屬性? –

+0

'MyControl '中的'Token'是否是私人的? – Charleh

+0

如果'Token'屬性不是'private',那麼你應該可以從'MyWindowControl'沒有問題的地方訪問它。如果它是私有的,那麼請考慮一下爲什麼你需要它,或者讓它受到保護' – Jcl

回答

1

簡化,這就像你有一個類Foo

public class Foo 
{ 
} 

然後創建一個列表:

var fooList = new List<Foo>(); 

而現在Foo,你想要接受ss fooList.Count。你不能。 Foo不知道它被一般使用。