我正在尝试使用所有来自同一基类的对象列表。
我有我的基本类型(问题(和派生类型(3TQ、2TQ(
根据具体情况,列表将全部属于一种或其他派生类型。
所以我所有的接口都处理基本类型问题的列表。
但是一旦我掌握了列表,我就无法访问派生类型。
长话短说 - 如何从基本对象列表中提取可用的派生对象? 我觉得这应该很容易,而且我错过了一些非常明显的东西。
你必须使用显式强制转换,代码看起来像这样,
这是从类 Base 派生的子类。
子项 c = 新子项((;
UpCast 可以隐式完成,没有任何问题
基数 b = c;
需要显式转换才能将对象转换回派生对象。
儿童 c1 = (儿童( b;
现在,由于这是运行时操作,因此在转换不正确的情况下不会出错,因此始终在转换前进行检查。 您可以使用"is"或"as"关键字, 以下是将为您提供更多详细信息的链接。
https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/as
https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/is
希望这有帮助
我想我明白你的意图。您可以在基类中定义虚拟方法,并在您提到的两个派生类中重写 (这肯定能够访问特定于该类的属性。这些重写的方法可能还需要返回使用代码所依赖的某些内容。可能下面的代码片段可以帮助您可视化:
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*/
}
}