2010-07-30 9 views
7

W języku C#, czy jest możliwy dostęp do zmiennej instancji za pomocą metody statycznej w różnych klasach bez używania przekazywania parametrów?Czy można uzyskać dostęp do zmiennej instancji za pomocą metody statycznej?

W naszym projekcie mam klasę Data access layer, która ma wiele metod statycznych. W tych metodach wartość limitu czasu SqlCommand została zakodowana na stałe. W innej klasie (Dac) w naszym szkielecie istnieje wiele metod instancji, które nazywają te statyczne metody.

Nie chcę kodować za dużo przy użyciu przekazywania parametrów. Czy masz jakieś inne rozwiązanie, które jest łatwiejsze niż przekazywanie parametrów?

+0

Metoda statyczna nie jest związana z żadnym przykład jak więc można oczekiwać, że aby wiedzieć, które instancja uzyskać dostęp do członka? –

+0

której instancji? –

Odpowiedz

11

Tak, istnieje możliwość uzyskania dostępu do zmiennej instancji z metody statycznej bez użycia parametru, ale tylko wtedy, gdy można uzyskać do niej dostęp za pośrednictwem zadeklarowanej wartości statycznej. Przykład:

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, ale oh [horror zmiennych globalnych] (http://c2.com/cgi/wiki?GlobalVariablesAreBad)! –

+0

tak ... przywołuje wspomnienia z dziecięcych koszmarów! –

5

Oczywiście można przekazać instancję jako parametr tej metody. Podobnych:

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

Ale nie byłoby możliwe uzyskanie jakichkolwiek zmiennych instancji w inny sposób.

+0

dzięki Jake, ale zmieniłem pytanie. – mkus

6

Metoda statyczna nie ma instancji do pracy, więc nie. Nie jest to możliwe bez przekazania parametrów.

Inną opcją może być użycie statycznej instancji klasy (przykład Mark pokazuje tę metodę w pracy), chociaż z twojego przykładu nie jestem pewien, czy to rozwiąże twój problem.

Osobiście uważam, że przekazywanie parametrów będzie najlepszą opcją. Wciąż nie jestem pewien, czemu chcesz się przed tym powstrzymać.

+0

Justin, zredagowałem moje pytanie dla twojego zainteresowania. – mkus

+1

Edycja sprowadza się do "Nie chcę", co nie jest dobrym powodem technicznym. Alternatywa jest naprawdę bardzo zła, o ile nie niemożliwa. – siride

1

Nie, nie możesz.

Jeśli chcesz uzyskać dostęp do zmiennej instancji, to Twoja metoda z definicji nie powinna być statyczna.

+0

Co z dostępem do właściwości instancji singletonów? –

+1

@Richard: W pojedynczym egzemplarzu masz instancję, a metody nie będą w tym przypadku statyczne. Tylko metoda uzyskiwania instancji singleton jest statyczna. –

2

Tak, może tak długo, jak ma instancję obiektu w zakresie. Singletons na przykład, czy obiekty utworzone w samej metodzie ..

Weźmy na przykład wspólny scenariusz:

public static string UserName 
{ 
    return System.Web.HttpContext.Current.User.Identity.Name; 
} 
Powiązane problemy