我正在尝试使用来自同一基类的对象列表。
我有我的基本类型(问题)和派生类型(3TQ,2TQ)
根据情况,列表将全部为一种或其他派生类型。
所以我的所有接口都处理基类型问题的列表。
但是一旦我掌握了列表,就无法访问派生类型。
这么长的故事简短 - 如何从基础对象列表中提取可用的派生对象?我觉得这很容易,而且我错过了一些非常明显的东西。
答案 0 :(得分:1)
你必须使用显式转换,代码看起来像这样,
//这是从类Base派生的Child类。
儿童c =新儿童();
// UpCast可以隐式完成,没有任何问题
基础b = c;
//将对象强制转换为派生所需的显式转换 孩子c1 =(孩子)b;
现在,由于这是运行时操作,因此在不正确的转换时不会出现错误,因此在转换之前总是进行检查。你可以使用"是"或" as"关键字,以下链接将为您提供更多详细信息。
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/as
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/is
希望这有帮助
答案 1 :(得分:0)
我想我明白了你的意图。你可以在基类中定义虚方法,并在你提到的两个派生类中重写(这肯定能够访问特定于该类的属性。这些重写的方法可能还需要返回一些消耗代码依赖于它的东西。可能在下面的代码片段中,您可以看到:
public class MyBaseClass
{
public virtual int MyMethod()
{
return default(int);
}
}
public class MyDerivedClass1:MyBaseClass
{
public int MyProperty1 { get; set; }
public override int MyMethod()
{
return MyProperty1;
}
}
public class MyDerivedClass2 : MyBaseClass
{
public int MyProperty2 { get; set; }
public override int MyMethod()
{
return MyProperty2;
}
}
public class MyConsumer
{
List<MyBaseClass> baselist = new List<MyBaseClass>
{
new MyDerivedClass1 {MyProperty1=2 },
new MyDerivedClass2 {MyProperty2=5 }
};
public void TestMethod()
{
foreach(var item in baselist)
{
var x = item.MyMethod();
/* take care of your actual logic here*/
}
}