从接口实例中提取数据类型信息

时间:2013-06-18 16:47:11

标签: c#

假设我们有两个实现公共接口的类。

public interface IContract
{
    int Type  { get; }
}

public class XClass : IContract
{
    public int Type  { get; set; }
    public int X { get; set; }
}

public class YClass : IContract
{
    public int Type  { get; set; }
    public int Y { get; set; }
}

现在,正如您所知,当我们将一个类分配给已实现的接口时,接口实例将包含所装入的已分配类的所有数据。

IContract ic = new XClass();

应该有一种方法来检测接口变量ic中的值的数据类型。

If(ic包含XClass数据类型)然后...... If(ic包含YClass数据类型)然后......

如果有人能帮助我检测分配给接口实例的数据类型,我会很高兴。感谢。

3 个答案:

答案 0 :(得分:4)

你试过了吗?

if (ic is XClass)

您可以使用“is”关键字来确定该类。然后总是.GetType(),但那不是那么干净。

if (ic.GetType() == typeof(XClass))

此外,值得一提的是as关键字。如果要从当前对象声明新对象,请保证它是特定类:

var d = ic as XClass

如果ic不是XCLass,则会将d设置为null

答案 1 :(得分:1)

'is'运算符用于在运行时动态获取对象的类型,'as'用于在类型之间键入转换。

以上示例对您有所帮助。

虽然如果你的类实现是相同的而不管类型如何,那么你应该使用泛型。

答案 2 :(得分:1)

if (ic.GetType().Equals(typeof(XClass))) 
{ //do something }