Ich habe eine Utility-Klasse (U), die ich aus anderen Klassen aufrufe. Lassen Sie uns Tag ich habe diese Funktionen in U:
Func1(params):
/*some code*/
funcA(param1,param2)
/*some_code*/
Func2(same params as in Func1):
/*same code as in 1*/
funcB(param1,param2) //same types of params as in funcA
/*same code as in 1*/
Wie kann ich hier doppelten Code vermeiden? Ich habe darüber nachgedacht, einen Delegaten von funcA oder B zu übergeben, aber das Problem ist, dass sie innerhalb der Utility-Klasse implementiert sind und ich func1 / 2 von außerhalb aufrufe, sodass der Aufrufer funcA oder funcB nicht kennt. Irgendwelche Ideen? Mein Programm ist in c # (dieser Code ist eine Abstraktion) Danke
2 Antworten
Sie können den gemeinsamen Teil extrahieren und den Delegaten aus Func1
bzw. Func2
übergeben.
private delegate string PerformOperation(Type1 param1, Type2 param2);
private void CommonFunc(Type1 param1, Type2 param2, PerformOperation operation)
{
PreSteps();
operation(param1, param2);
PostSteps();
}
Sie rufen lediglich CommonFunc
mit den Parametern und dem Delegaten auf
public void Func1(Type1 param1, Type2 param2)
{
CommonFunc(param1, param2, funcA);
}
public void Func2(Type1 param1, Type2 param2)
{
CommonFunc(param1, param2, funcB);
}
Da CommonFunc
private
ist, muss der Client Ihrer Bibliothek weder PerformOperation
noch funcA
oder funcB
kennen.
Ich hätte gesagt, eine Aktion zu bestehen oder Delegieren als Parameter, aber wie Sie erwähnt haben, dass der Anrufer nichts über funcA oder FuncB weiß, ist dies nicht geeignet. Als einfachen Vorschlag würde ich versuchen, die 2 duplizierten Codeblöcke zu kapseln . Am Ende hätten Sie also so etwas:
Func1(params)
{
EncapsulatedBlockOfCode1();
funcA(param1,param2);
EncapsulatedBlockOfCode2();
}
Func2(same params as in Func1)
{
EncapsulatedBlockOfCode1();
funcB(param1,param2) //same types of params as in funcA
EncapsulatedBlockOfCode2();
}
Zumindest kann dies Ihnen helfen, den duplizierten Code zu reduzieren und klarer zu sehen, wie Sie Ihren Code umgestalten können.
Neue Fragen
c#
C # (ausgesprochen "siehe scharf") ist eine statische Typisierungsprogrammiersprache mit mehreren Paradigmen, die von Microsoft entwickelt wurde. C # -Code zielt normalerweise auf die .NET-Tools und -Laufzeiten von Microsoft ab, zu denen unter anderem .NET Framework, .NET Core und Xamarin gehören. Verwenden Sie dieses Tag für Fragen zu Code, der in der formalen Spezifikation von C # oder C # geschrieben ist.