2016-09-21 64 views
0

我有2類,從anotherone一個繼承刪除基本參考

public class A 
{ 
    public string prop1 { get; set; } 
    public string prop2 { get; set; } 
    public string prop3 { get; set; } 
} 

public class B : A 
{ 
    public string prop4 { get; set; } 
} 

現在我創建類B的列表,並將其澆注到一個類型的類B的

List<B> BList = new List<B>(); 
BList = new List<B>() { new B() { prop1 = "1", prop2 = "2", prop3 = "3", prop4 = "4" } }; 
List<A> AList = BList.Cast<A>().ToList(); 

但是,當我調試,仍然有對類B的引用: enter image description here

如何刪除/避免從基類屬性的顯示?

+1

你爲什麼要避免這種情況?僅僅是爲了使調試更容易/更少混亂?如果沒有,那麼你是否真的需要一個班級從另一個班級繼承? –

+2

如果'B'繼承自'A',則總會有從'B'到'A'的引用。你想如何避免它,最重要的是,爲什麼? – walther

+2

這是毫無意義的,因爲*沒有*對'A'的引用,因爲'B'已經*是一個'A'實例。你在調試器中看到的僅僅是'B'的實例,轉換爲'A'。 – HimBromBeere

回答

1

你不能刪除這個,但你可以讓它在調試器中以不同的方式出現。 使用調試器類型代理作爲documented here以您喜歡的方式在調試器中顯示類。列表和字典都是這樣完成的,因此您可以使用反編譯器(如ILSpy)檢查源代碼。

例如:

using System.Diagnostics; 

[DebuggerTypeProxy(typeof(BDebugView))] 
public class B : A 
{ 
    private class BDebugView 
    { 
     private B _actualObject; 
     public string prop4 { get { return _actualObject.prop4; } } 

     public BDebugView(B actualObject) 
     { 
      this._actualObject = actualObject; 
     } 
    } 
} 

我認爲應該這樣做,我沒有,雖然測試。

+1

也許你可以展示一個這樣的例子以及它在調試器中的外觀?聽起來很有趣。 – HimBromBeere

+0

@HimBromBeere我爲好奇添加了一個例子。我不能推薦使用ILSpy(或Reflector)並開始檢查基類庫的內部工作。 – strongbutgood

+0

很酷,不知道這個功能。然而它不會幫助OP,因爲他正在嘗試與他的評論中所看到的完全不同的東西。 – HimBromBeere