2016-09-21 66 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