【问题标题】:How to make property overrides of C# classes during runtime如何在运行时覆盖 C# 类的属性
【发布时间】:2013-09-07 05:46:37
【问题描述】:

考虑一些代表一些应用程序数据的 C# 类。例如带有一些属性的class A:

public class A
{
    public bool P1 { set; get; }
    public string P2 { set; get; }
    public int P3 { set; get; }
}

此外,我的申请中有不同的时间范围。可以说时间范围 1 和 2。起初我的应用程序设置为时间范围 1。A 的某些实例存在于所有时间范围内。现在我切换到时间范围 2 并为A 的某个实例的P2 设置一个新值。新值应仅影响时间范围 2。切换回时间范围 1 后,P2 应具有旧值。切换回时间范围2,P2又是新值。

每当我在我的数据模型中设置任何值时,它都应该特定于当前时间范围,而不影响其他时间范围。另一方面,未更改的值应在所有时间范围内共享。对于如何表示这些时间范围没有任何要求。可能是一些TimeRange 类,但也可能是别的东西。

您将如何在 C# 中设计这样的场景?

【问题讨论】:

  • 目前还不清楚您所说的“模式 1”和“模式 2”是什么意思——这一变化的范围。如果您能提供更多背景信息,我怀疑人们会发现更容易回答这个问题。
  • 我添加了一些额外的信息并将“模式”替换为“时间范围”。你认为它现在足够容易理解了吗?
  • 并非如此,因为我们仍然不太了解您所说的“时间范围”是什么意思。例如,这是如何将其传达给不同的对象的?

标签: c# oop data-modeling


【解决方案1】:

也许您可以将string P2 更改为Tuple<string, string>,这样您就可以访问这两个值来切换您的“模式”。

【讨论】:

    【解决方案2】:

    我认为您必须将属性替换为方法,因为它与时间范围有关。或者如果可能的话,包括这个课程的时间范围。

    【讨论】:

    • 方法的可能签名 public string GetP2(timeRange); public string SetP2(string p2, timerange);
    • 好主意。但这不是一个选项,因为我想保留使用实体框架的可能性。因此它必须是属性。
    猜你喜欢
    • 1970-01-01
    • 2014-10-28
    • 2011-05-23
    • 2017-10-14
    • 2021-04-11
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多