在没有继承的情况下从不同的 类 访问 Class.Name 属性
Accesing a Class.Name property from diffrent classes without inheritance
我正在尝试编写一个方法,该方法使用 Name
属性 不同的 classes 并用它做一些逻辑。
在我的示例中,为了保持简单,我将限制自己只返回 Name
值:
class Dog
{
public string Name { get; set; }
}
class Human
{
public string Name { get; set; }
}
/*
...
*/
public string GetNameFromNameProperty(object obj)
{
return obj.Name;
}
遗憾的是,classes 并未继承自具有 Name
属性 的父 class。此外,不可能实现它或添加接口。
简短回顾:
是否可以编写一个使用 Name
属性 的通用方法,而不确定 class 是否已实现 属性?
如果您真的不想让所有这些class实现一个公共接口或从一个基础class继承,那么这里是两个选项:
反思:
public string GetNameFromNameProperty(object obj)
{
var type = obj.GetType();
return type.GetProperty("Name").GetValue(obj) as string;
}
动态绑定:
public string GetNameFromNameProperty(dynamic obj)
{
try
{
return obj.Name;
}
catch (RuntimeBinderException)
{
throw new PropertyDoesntExistException();
}
}
如果 属性 不存在,您也可以选择 return null。
但是,我强烈建议您使用接口或继承来做到这一点。如果您使用上述方法,您基本上会失去 C# 提供的所有类型安全。
我正在尝试编写一个方法,该方法使用 Name
属性 不同的 classes 并用它做一些逻辑。
在我的示例中,为了保持简单,我将限制自己只返回 Name
值:
class Dog
{
public string Name { get; set; }
}
class Human
{
public string Name { get; set; }
}
/*
...
*/
public string GetNameFromNameProperty(object obj)
{
return obj.Name;
}
遗憾的是,classes 并未继承自具有 Name
属性 的父 class。此外,不可能实现它或添加接口。
简短回顾:
是否可以编写一个使用 Name
属性 的通用方法,而不确定 class 是否已实现 属性?
如果您真的不想让所有这些class实现一个公共接口或从一个基础class继承,那么这里是两个选项:
反思:
public string GetNameFromNameProperty(object obj)
{
var type = obj.GetType();
return type.GetProperty("Name").GetValue(obj) as string;
}
动态绑定:
public string GetNameFromNameProperty(dynamic obj)
{
try
{
return obj.Name;
}
catch (RuntimeBinderException)
{
throw new PropertyDoesntExistException();
}
}
如果 属性 不存在,您也可以选择 return null。
但是,我强烈建议您使用接口或继承来做到这一点。如果您使用上述方法,您基本上会失去 C# 提供的所有类型安全。