假设我们有两个类:
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)
{
}
泛型,动态,界面还是不同的?我会采取行动,但我不想失去其他财产。
答案 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
可行,但它可以对付类型系统,它实际上意味着将静态类型检查语言的所有好处都抛弃了。使用接口时,如果其中一个类没有实现它继承的接口,则会出现编译时错误。