2

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

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 contains XClass datatype) Then ... If(ic contains YClass datatype) Then ...

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

4

3 回答 3

4

你有没有尝试过:

if (ic is XClass)

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

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

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

var d = ic as XClass

如果ic不是 XCLass,它将设置dnull.

于 2013-06-18T16:49:38.273 回答
1

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

上面的例子会对你有所帮助。

尽管如果无论类型如何,您的类实现都是相同的,那么您应该使用泛型。

于 2013-06-18T17:03:56.507 回答
1
if (ic.GetType().Equals(typeof(XClass))) 
{ //do something }
于 2013-06-18T17:09:01.990 回答