如何访问存储在基 class 列表中的派生 class 中的属性
how to access properties in derived class stored in a list of the base class
我正在尝试处理所有来自同一基础的对象列表 class。
我有我的基本类型(问题)和派生类型(3TQ、2TQ)
根据情况,列表将全部为一种或其他派生类型。
所以我所有的接口都处理基类型问题的列表。
但是一旦掌握了列表,我就无法访问派生类型。
长话短说 - 如何从基础对象列表中提取可用的派生对象?我觉得这应该很容易,而且我遗漏了一些非常明显的东西。
您将不得不使用显式转换,代码如下所示,
// 这是从 class Base 派生的 Child Class。
Child c = new Child();
//UpCast可以隐式完成,没有任何问题
基数 b = c;
//需要显式转换才能将 object 转换回派生。
Child c1 = (Child) b;
现在,由于这是运行时操作,如果转换不正确,您不会收到错误消息,因此在转换前一定要进行检查。您可以使用 "is" 或 "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
希望对您有所帮助
我想我明白你的意思了。您可以在基础 class 中定义虚拟方法,并在派生的 class 中重写您提到的(这肯定能够访问特定于 class 的 属性 。这些重写的方法可能还需要 return 你的消费代码依赖于它的一些东西。下面的代码片段可能会帮助你形象化:
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*/
}
}
我正在尝试处理所有来自同一基础的对象列表 class。
我有我的基本类型(问题)和派生类型(3TQ、2TQ)
根据情况,列表将全部为一种或其他派生类型。
所以我所有的接口都处理基类型问题的列表。
但是一旦掌握了列表,我就无法访问派生类型。
长话短说 - 如何从基础对象列表中提取可用的派生对象?我觉得这应该很容易,而且我遗漏了一些非常明显的东西。
您将不得不使用显式转换,代码如下所示,
// 这是从 class Base 派生的 Child Class。
Child c = new Child();
//UpCast可以隐式完成,没有任何问题
基数 b = c;
//需要显式转换才能将 object 转换回派生。
Child c1 = (Child) b;
现在,由于这是运行时操作,如果转换不正确,您不会收到错误消息,因此在转换前一定要进行检查。您可以使用 "is" 或 "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
希望对您有所帮助
我想我明白你的意思了。您可以在基础 class 中定义虚拟方法,并在派生的 class 中重写您提到的(这肯定能够访问特定于 class 的 属性 。这些重写的方法可能还需要 return 你的消费代码依赖于它的一些东西。下面的代码片段可能会帮助你形象化:
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*/
}
}