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 ?
答案 0 :(得分:4)
使用反射,我们可以查询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
您可以在列表中查看所需的属性。
IMO,这是查询您的课程以获取此信息的一种昂贵方式。也许有更多关于为什么的背景知识,你可以做出更好的选择。