2010-07-30 23 views
7

In C# ist es möglich, über eine statische Methode in verschiedenen Klassen auf eine Instanzvariable zuzugreifen, ohne Parameterübergabe zu verwenden?Kann auf eine Instanzvariable über eine statische Methode zugegriffen werden?

In unserem Projekt habe ich eine Data access layer Klasse, die eine Menge von statischen Methoden hat. Bei diesen Methoden wurde der Timeout-Wert SqlCommand fest codiert. In einer anderen Klasse (Dac) gibt es in unserem Framework viele Instanzmethoden, die diese statischen Methoden aufrufen.

Ich möchte nicht zu viel Code mit Parameter übergeben. Haben Sie eine andere Lösung, die einfacher ist als die Parameterübergabe?

+0

Eine statische Methode ist nicht mit einem beliebigen Instanz zugeordnet ist, so, wie Sie erwarten, es zu wissen, welche Instanz Zugang zu einem Mitglied von? –

+0

welche Instanz? –

Antwort

11

Ja, es ist möglich, von einer statischen Methode aus auf eine Instanzvariable zuzugreifen, ohne einen Parameter zu verwenden, aber nur, wenn Sie über eine statische Variable darauf zugreifen können. Beispiel:

public class AnotherClass 
{ 
    public int InstanceVariable = 42; 
} 

public class Program 
{ 
    static AnotherClass x = new AnotherClass(); // This is static. 

    static void Main(string[] args) 
    { 
     Console.WriteLine(x.InstanceVariable); 
    } 
} 
+4

+1, aber oh [der Horror der globalen Variablen] (http://c2.com/cgi/wiki?GlobalVariablesAreBad)! –

+0

ja ... bringt Erinnerungen an Kindheitsträume hervor! –

5

Sicher, Sie könnten eine Instanz als Parameter an die Methode übergeben. Wie:

public static void DoSomething(Button b) 
{ 
    b.Text = "foo"; 
} 

Aber es wäre nicht möglich, ansonsten jederInstanzVariablen zu erhalten.

+0

danke Jake, aber ich habe die Frage geändert. – mkus

6

Eine statische Methode hat keine Instanz, mit der man arbeiten könnte, also nein. Ohne Parameterübergabe ist das nicht möglich.

Eine andere Option für Sie könnte die Verwendung einer statischen Instanz der Klasse sein (Marks Beispiel zeigt diese Methode bei der Arbeit), obwohl ich aus Ihrem Beispiel nicht sicher bin, dass das Ihr Problem lösen würde.

Persönlich denke ich Parameterübergabe wird die beste Option sein. Ich bin mir immer noch nicht sicher, warum du dich davor zurückhalten willst.

+0

Justin, ich habe meine Frage für Ihr Interesse bearbeitet. – mkus

+1

Die Bearbeitung läuft auf "Ich will nicht" hinaus, was kein guter technischer Grund ist. Die Alternative ist wirklich sehr schlecht, wenn nicht gar unmöglich. – siride

1

Nein, Sie können nicht.

Wenn Sie auf eine Instanzvariable zugreifen möchten, sollte Ihre Methode per Definition nicht statisch sein.

+0

Wie steht es mit dem Zugriff auf Instanzeigenschaften von Singletons? –

+1

@Richard: Mit einem Singleton haben Sie eine Instanz und die Methoden wären in diesem Fall nicht statisch. Nur die Methode zum Abrufen der Singleton-Instanz ist statisch. –

2

Ja, es kann, solange es eine Instanz eines Objekts im Geltungsbereich hat. Singletons zum Beispiel, oder Objekte innerhalb des Verfahrens erstellt selbst ..

Nehmen Sie zum Beispiel ein gängiges Szenario:

public static string UserName 
{ 
    return System.Web.HttpContext.Current.User.Identity.Name; 
} 
Verwandte Themen