我有一个具有很少属性A,B,C的类。我认为这是一个输入对象,因为我在逻辑中使用它来根据这些属性的值运行一些规则。现在,在运行规则之后,我创建了另一个类作为输出,它具有相同的属性和相同的值,以及特定于输出的其他几个属性。
现在,我的问题是如何在输入和输出类之间共享这些属性(A,B,C),而不必手动将输入值分配给输出。你能告诉我一个我需要使用的有效设计吗?这里是抽象类概念吗?或者还有其他有效方法吗?
答案 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;
}