假设我们有两个实现公共接口的类。
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数据类型)然后......
如果有人能帮助我检测分配给接口实例的数据类型,我会很高兴。感谢。
答案 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 }