我很難理解爲什麼它返回基值而不是實際值。我需要確定有一個Prop
,但我想使用實際值而不是基準值。使用基本屬性而不是聲明
public interface IA
{
string Value { get; set; }
}
public class A : IA
{
public String Value { get; set; }
}
public class B
{
public IA Prop { get; set; }
}
public class C : B
{
public new A Prop { get; set; }
public C()
{
Prop = new A();
Prop.Value = "test C";
}
}
public static class D
{
public static string GetDynamicProp(dynamic item)
{
return item.Prop.Value;
}
public static string GetProp<T>(T item) where T : B
{
return item.Prop.Value;
}
}
,然後用它:
var test = new C();
Console.WriteLine(test.Prop.Value); // test C
Console.WriteLine(C.GetDynamicProp(test)); // test C
Console.WriteLine(D.GetProp(test)); // null reference exception because it is using the `IA Prop` from `B`
當使用動態類型它的工作,但我不能例如使用智能感知。所以我想確保發送到D.GetProp
的對象實現了IA
的屬性,但仍使用實際值。
我希望Prop
始終是實現IA
的類型,但它可以是繼承類型。
>我希望Prop始終是實現IA的類型,但它可以是繼承類型。 你已經知道在編譯時,你在'Prop'中有哪些實際的繼承類型'IA'?或者你只知道運行時? –
@ RonaldRink'd-fens'我在class C中聲明瞭實際的類型。那是當我知道它是什麼。 –