在多个类之间共享属性

时间:2009-06-03 16:18:47

标签: properties shared

我有一个具有很少属性A,B,C的类。我认为这是一个输入对象,因为我在逻辑中使用它来根据这些属性的值运行一些规则。现在,在运行规则之后,我创建了另一个类作为输出,它具有相同的属性和相同的值,以及特定于输出的其他几个属性。

现在,我的问题是如何在输入和输出类之间共享这些属性(A,B,C),而不必手动将输入值分配给输出。你能告诉我一个我需要使用的有效设计吗?这里是抽象类概念吗?或者还有其他有效方法吗?

5 个答案:

答案 0 :(得分:0)

使用仅具有属性的中间类,然后从输入和输出对象访问该类的实例,但在大多数情况下,将值从输入复制到输出会更简单。

答案 1 :(得分:0)

您是否考虑过使用singleton设计模式?我不熟悉你的项目规范,但似乎它可以帮助你,或者至少会给你指路。

答案 2 :(得分:0)

您可以在输出类上定义一个隐式运算符(C#),如下所示:

public static implicit operator OutputClass(InputClass m) 
{
   this.A = m.A;
   this.B = m.B;
   this.C = m.C;
}

然后你所要做的就是:

output = input;

并且您将有效地从输出中输入所需的输入中的所有数据。

答案 3 :(得分:0)

选项 - 单例 - 工作但依赖于重用场景。 您使用的是“new MyObj()”以外的任何类型的工厂或实例模式吗?如果是这样,工厂可以做 - 这导致下一个方法 - 注入。你的语言是支持注射还是某种形式(又名 - 春天)。您可以定义一个setter方法,但是将它留给注入框架和/或工厂方法来处理/进行设置 - 再次取决于用例。

如果基于运行时,则需要使用composition - delegate来引用原始对象或中间对象(后者又包装A,B C等)。

可能有点遗留下来,但我假设您的问题只是为了解决更大问题的一些简单案例。

属性是动态的吗 - 编译时间与运行时间?他们是否会改变(即从数据库处理动态更新)。您是需要在测试工具中运行还是使用模拟值运行,然后在完整应用程序的上下文中进行测试?

答案 4 :(得分:0)

不知道更多,我认为继承和多态是可行的方法:

class input 
{
   public int A { get; set;}
   public int B { get; set;}
   public int C { get; set;}
}

class output : input {
   public int D { get; set;}
   public int E { get; set;}
   public int F { get; set;}
}

你这么简单:

void main()
{
    output tpt = new output();
    tpt.A = 3;
    tpt.B = 2;
    tpt.C = 4;

    tpt = dosomething((input)tpt);
}

public output dosomething(input inpt)
{
    //blablabla
    output tpt = (output)inpt;
    tpt.D = 1;
    tpt.E = 2;
    tpt.F = 3;

    return tpt;
}