我有不同类型的列表。类具有公共基类和通用接口:
public List<IColumn> columnTypes = new List<IColumn>
{
new Column1(),
new Column2(),
new Column3()
};
现在我需要一个变量c:
c = columnTypes[x];
其中x是在运行时确定的,因此c将在运行时确定其类型。 我怎么能这样做?
答案 0 :(得分:3)
您有一个界面(IColumn
)...您应该使用该界面中的Column*
。
IColumn c = columnTypes[x];
c.Foo(); // where Foo is a method defined in IColumn and implemented in Column*
如果您愿意,可以:
Column1 c1 = c as Column1;
if (c1 != null)
{
c1.SpecificFooC1(); // "special" method of Column1
}
或
if (c1 is Column1)
{
// Here we were only interested in knowing if c1 was Column1
}
答案 1 :(得分:1)
为什么不使用接口类型的变量
IColumn c = columnTypes[x];
如果您的类型没有完全实现接口IColumn
您可以使用columnTypes[x].GetType()
,但这需要一些额外的编码
答案 2 :(得分:0)
var c = columnTypes[x];
c.GetType()
会为您提供Type
对象,其中包含您需要的所有信息:here是一个概述。