【问题标题】:How to add a simple property to an object without using a wrapper?如何在不使用包装器的情况下向对象添加简单属性?
【发布时间】:2015-02-11 11:02:50
【问题描述】:

假设我有一个对象用户并且我不能编辑它的类。如何向对象添加简单的属性,如用户名?

目前我的实现是一个使用用户构造的简单包装器。然后用户成为我的包装器对象的一个​​属性,并且包装器对象包含一个名为用户名的属性。但在我看来,这不是正确的方法。注意用户对象不是依赖对象,而且我知道扩展方法存在,但我不相信扩展方法存在,但我需要存储用户名,所以它不能是静态的。

非常欢迎任何建议。

【问题讨论】:

  • 从用户继承并添加您的属性。当然,这假设 User 类没有密封。顺便说一句,为什么你认为包装不是正确的方法? IMO 包装是要走的路。
  • 您可以将属性与对象分开(在某种字典中)。它们不会是属性(技术上)。
  • 如果 User 是 partial 类,那么您可以定义另一个 partial User 类来扩展它
  • 谢谢,但它不是部分类,由于 C# 中缺乏双重继承,我也不能简单地从用户继承。

标签: c# object


【解决方案1】:

在某种意义上,您要求在 C# 中实现 Mixin 模式,该模式无法直接实现,如 this question 中所述。但是,可以创建扩展方法(即 setter 和 getter)而不是 T 类型的属性。由于无法添加字段,因此可以将要存储和返回的值保存在后台Dictionary<User,T>中;这种方法实际上不允许使用属性,但它提供了一个解决方案,它不需要 Userpartial 或派生自 User

【讨论】:

    猜你喜欢
    • 2018-01-16
    • 1970-01-01
    • 2015-12-27
    • 2017-07-01
    • 1970-01-01
    • 2023-03-29
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多