【发布时间】:2018-07-26 08:02:33
【问题描述】:
有以下代码:
class TrxBase
{
public string Prop1 { get; set; }
public string Prop2 { get; set; }
}
class Trx : TrxBase
{
public string Prop3 { get; set; }
}
static void Print(TrxBase trx)
{
if (trx is Trx trx1)
{
Console.WriteLine(trx1.Prop3);
}
else
{
Console.WriteLine("no match");
}
}
static void Main(string[] args)
{
Trx t = new Trx();
t.Prop1 = "prop 1";
t.Prop3 = "prop 3";
Print(t);
}
上面的代码打印“prop 3”。据我所知。在 Print 方法中,对象将作为 TrxBase 读取。如果是这种情况,Prop3 属性保存在哪里?程序怎么知道我的参数实际上是一个Trx对象?
【问题讨论】:
-
我很难理解你的意思和你想要什么
-
是的,但是发送的参数是 TrxBase 类型的。我知道在这种情况下,参数将只有 TrxBase 类型的属性。那么它是如何知道我的对象有一个属性 Prop3 的,而该属性目前是不可见的呢?
-
当你将Trx作为TrxBase传递时,它并不是将Trx转换为基类型,它仍然是派生类型。这就是 C# 的工作原理。
-
@MineR 所以在方法里面,参数其实有派生类型的所有属性,但是不可见?有没有办法在没有反射的情况下获得这些属性?
-
我认为这是您需要查找的时间,继承、多态性和铸造.. 我很想回答,但我认为这是一个滑坡(投反对票),并且你真的必须承担自己的使命
标签: c# types type-inference