在没有继承的情况下从不同的 类 访问 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# 提供的所有类型安全。