2013-02-12 15 views
10

Gibt es in der folgenden Situation irgendeine Art von Konvention in C# (oder einer objektorientierten Sprache, die das Überladen von Methoden unterstützt)?Gibt es eine C# -Methode Überladung Parameterkonvention?

Können sagen, ich habe eine Methode foo:

public void Foo(int a){//does stuff} 

Aber ich habe eigentlich drei Methoden foo:

public void Foo(int a){} 
public void Foo(int a, double b){} 
public void Foo(float c, int a, double b){} 

Gibt es eine Konvention, die in ein, ob die Reihenfolge der Parameter Angelegenheiten erklärt überladene Methode? Beachten Sie, dass die dritte Methode keine logische Folge ist (a, b, c).

+1

Wenn 'a' immer erforderlich ist und' b' erforderlich ist, wenn 'c' angegeben wird, würde ich Folgendes tun:' public void Foo (int a, doppelt? B = null, float? C = null) - vorausgesetzt, Ihre Logik ist die gleiche. – zimdanen

+0

@zimdanen, es gibt keinen Grund, Parameter nullbar zu machen – Maxwe11

+5

@Jupiter: Die Idee ist, das als eine Alternative zu Überladungen zu verwenden. Es funktioniert gut, wenn es mehrere Parameter gibt, die alle unabhängig voneinander sind - Sie vermeiden es, die Anzahl der Überladungen jedes Mal zu verdoppeln, wenn Sie eine weitere hinzufügen. (Zugegeben, sobald Sie etwa 5 Parameter haben, sollten Sie wirklich genau hinsehen, ob dies ein geeignetes Design ist ...) –

Antwort

17

Ja, es gibt. Schauen Sie sich https://msdn.microsoft.com/en-us/library/ms229029(v=vs.110).aspx

Seien Sie konsequent in der Reihenfolge der Parameter in überladenen Mitgliedern. Parameter mit demselben Namen sollten in allen Überladungen an derselben Position erscheinen.

+3

Und weiter sollten Sie nur Methoden überladen, um Standardwerte für eine gebräuchliche Methode zur Verfügung zu stellen. Ansonsten sind die Methoden nicht stark genug miteinander verwandt, um denselben Namen zu haben, und sie sollten unterschiedliche Namen erhalten. –

1

Obwohl es nicht erforderlich ist, eine bestimmte Reihenfolge einzuhalten, ist es aus Gründen der Lesbarkeit im Allgemeinen eine gute Idee. Die Reihenfolge der Parameter spielt jedoch für die Methodensignatur eine Rolle. Beispiel:

public void DoStuff(int a, bool b, string c) 
{ 

} 

public void DoStuff(bool b, string c, int a) 
{ 

} 

ist gültig und kompiliert problemlos, auch wenn die Anzahl der Parameter und sogar ihre Namen identisch sind.

Update: Ich würde nicht empfehlen, es so zu tun. Es könnte zu Verwirrung führen. Ich habe nur gesagt, dass es technisch gültig ist.

+0

Während dies gültig ist, wäre es für diejenigen, die die Methode verwenden, völlig verwirrend. –

+0

Genau deshalb habe ich gesagt, dass es eine gute Idee ist, die Reihenfolge der Lesbarkeit einzuhalten. Ich persönlich würde es nicht so machen. Ich habe nur für das Protokoll angegeben, dass die Reihenfolge der Parameter in die Signatur der Methode eingeht. Wenn dies nicht der Fall wäre, würde es dem Compiler schwerer fallen, zwischen den Überlastungen zu unterscheiden. – sparky68967

Verwandte Themen