是否有一种在运行时告诉类属性是否来自接口的方法
本文关键字:是否 属性 方法 接口 运行时 一种 | 更新日期: 2023-09-27 18:04:56
public class Bus : IPresentable
{
public string Name { get; set; } = "Bus";
public int ID { get; set; } = 12345;
//******** IPresentable interface ***************//
public int LocX { get; set; }
public int LocY { get; set; }
}
接口:
public interface IPresentable
{
int LocX { get; set; }
int LocY { get; set; }
}
在我的应用程序:
Bus bus = new Bus();
bus.LocX = 10; // is there a way to tell that this comes from interface
bus.Name = "New Name" ; // but this is not ?
使用反射,我们可以询问Bus
类并检索"属于"类和它可能实现的所有接口的属性名称列表:
var interfaceProperties = typeof(Bus)
.GetProperties().Select(p => p.Name)
.Intersect(typeof(Bus)
.GetInterfaces()
.SelectMany(i => i.GetProperties())
.Select(p => p.Name))
结果interfaceProperties
是一个IEnumerable<string>
。在本例中,它将包含:
LocX
LocY
你可以在列表中查看你想要的属性。
依我看,这是一种昂贵的方式来询问您的类以获取此信息。也许有了更多关于为什么要这样做的背景知识,可以产生一个更好的替代