我在几个不同的C1,D2,F34类中有以下功能:
class C1
{
void SomeFunc
{
Statement1();
Obj = GetObj();
Statement2(Obj);
}
IMyObj Obj{get;private set;}
}
public static class MyObjExt
{
public static void Statement2(this IMyObj obj)
{
... do validation of 'obj';
... throw exception if object state is wrong
}
}
类C1,D2,F34不是同一层次结构的成员。
所以我想避免复制它们。
我可以这样做:
static MyObj MyFunc()
{
Statement1();
IMyObj obj = GetObj();
Statement2(obj);
return obj;
}
class C1
{
void SomeFunc
{
Obj = MyFunc();
}
IMyObj Obj{get;private set;}
}
但如果“Statement2”函数抛出异常,则obj成员将保持未初始化...
我怎么能避免复制粘贴?
答案 0 :(得分:1)
我有一个更复杂的解决方案:
class Extender
{
static IMyObj MyFunc(out IMyObj obj)
{
Statement1();
obj = GetObj();
Statement2(obj);
}
}
class C1
{
void SomeFunc
{
IMyObj obj=null;
try
{
MyFunc(out obj);
}
finally
{
Obj = obj;
}
}
IMyObj Obj{get;private set;}
}
但我不确定它是否会且必须有效。这是好的还是坏的方法?
如果你觉得它很好 - 请投票,如果没有 - 请指出“为什么”?
非常感谢!
编辑:修改后添加了'SomeFunc'实现。