2016-06-13 11 views
0

Ich frage mich, ob C# bietet eine Möglichkeit, die Methoden ihre Parameter zu "erben" und erlauben, mit ihnen zu arbeiten, anstatt nur Parameter-Liste an die zweite Methode erneut übergeben. Hier ist, wie es wäre möglicherweise funktionieren:Methode "Vererben" andere Methodenparameter

void Method1(string p1, int p2, bool p3) 
{ 
    string result = Method2(p1,p2,p3); 
} 
string Method2():Method1() 
{ 
    if(p3) 
    { 
     return p1 + p2.ToString(); 
    } 
    else 
    { 
     return null; 
    } 

} 

statt

void Method1(string p1, int p2, bool p3) 
{ 
    string result = Method2(p1,p2,p3); 
} 
string Method2(string p1, int p2, bool p3) 
{ 
    if(p3) 
    { 
     return p1 + p2.ToString(); 
    } 
    else 
    { 
     return null; 
    } 
} 

Nicht sicher, ob es tatsächlich macht keinen Sinn, aber ich bin neugierig, ob es möglich ist. Wenn nicht, haben Sie eine Problemumgehung, die das Umschreiben dieser Parameter in Method2() verhindern würde?

+0

Werfen Sie einen Blick auf diese .. ist das etwas, was Sie versuchen zu erreichen, wenn jetzt bitte versuchen, besser zu erklären .. http://stackoverflow.com/questions/13536993/constructor-parameters-and-inheritance – MethodMan

+3

Ihr Beispiel nicht geben Sie einen guten Grund dafür, warum dies sinnvoll sein sollte. Es gibt keinen ersichtlichen Grund für die Existenz von Methode1. Auch die Antwort ist nein, es ist nicht möglich. – CSharpie

Antwort

1

NEIN, es ist kein solches Konstrukt vorhanden und selbst es wäre dort gewesen, es würde keinen Sinn ergeben, Methodenparameter zu verwenden. Im Maximum, in der zweiten Methode können Sie sie optionalen Parameter sagen

void Method1(string p1, int p2, bool p3) 
{ 
    string result = Method2(p1,p2,p3); 
} 

string Method2(string p1 = null, int p2 = 10, bool p3 = false) 
{ 
0

Nein, Sie können Parameter nicht erben. Besteht das Problem, dass Sie viele Methoden mit derselben Signatur verwenden, die alle die gleichen Parameter übergeben, und Sie nicht alle beibehalten müssen, wenn Sie eine Änderung vornehmen?
Wenn Sie eine "Entität" aus mehreren Werten haben, die Sie weitergeben, dann erstellen wir normalerweise eine Klasse.

public class WhateverTheseParametersAre 
{ 
    public string P1 {get;set;} 
    public string P2 {get;set;} 
    public bool P3 {get;set;} 
} 

Das beseitigt auch die Notwendigkeit für optionale/default-Parameter.

+0

Ja, ich denke, dass das Umschließen dieser Variablen in eine Klasse/Tupel am sinnvollsten ist. Tatsächlich habe ich die Frage eher aus Neugier als nach einem echten Problem gestellt. Ich habe versucht, etwas mit Reflection und params [] keyword zu erreichen, aber es wäre wahrscheinlich sowieso ineffektiv – Wojtek