检查两个不同的对象是否具有属性

时间:2014-03-13 21:46:31

标签: c#

假设我们有两个类:

class A

{
    public int Prop1 { get; set; }

    public int Prop2 { get; set; }


}

class B
{

    public int Prop2 { get; set; }

    public int Prop3 { get; set; }


}

什么是最好的方法以及如何实现方法,该方法将获取类型A或B的对象并检查是否具有Prop2并将类型的返回对象传递为arquemnt,如下所示:

 T CheckIfHasProp2<T>(T)
{
}

泛型,动态,界面还是不同的?我会采取行动,但我不想失去其他财产。

1 个答案:

答案 0 :(得分:3)

最好的方法是知道对象的类型:)

要表示某个对象能够在C#中执行某些操作,您可以使用一个接口。

接口表示“可以做”的关系。它们代表合同一段代码必须服从。

例如,如果Prop2是吃饭的能力,你可以创建一个IEat接口,并拥有可以从中继承的类。在下面的示例中,我调用接口IProp2 - 您应该为接口提供描述实际行为的有意义的名称:

interface IProp2
{
    int Prop2 { get; set; }
}
class A : IProp2
{
    public int Prop1 { get; set; }

    public int Prop2 { get; set; }


}

class B : IProp2
{

    public int Prop2 { get; set; }

    public int Prop3 { get; set; }
}
// inside main
var a = new A();
// check if it's a member, though usually you don't need this
Console.WriteLine(a is IProp2);  // true

(这与其他语言不同,如TypeScript,其中继承不是名义上的,但这是另一个故事)。

请注意,虽然dynamic可行,但它可以对付类型系统,它实际上意味着将静态类型检查语言的所有好处都抛弃了。使用接口时,如果其中一个类没有实现它继承的接口,则会出现编译时错误。