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

本文关键字:对象 是否 属性 两个 检查 | 更新日期: 2023-09-27 17:50:14

假设我们有两个类:

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和返回类型的对象作为参数传递,像这样:

 T CheckIfHasProp2<T>(T)
{
}

通用,动态,接口或STH不同?我可以选择interface但是我不想失去其他属性

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

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

要在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等其他语言不同,在TypeScript中继承不是名义上的,但那是另一回事)。

注意,虽然dynamic可以工作,但它与类型系统相反,并且它实际上意味着放弃静态类型检查语言的所有好处。对于接口,如果其中一个类没有实现它继承的接口,则会得到编译时错误。