2012-03-17 11 views
5

Powiel możliwe:
When to Use Static Classes in C#Wskazówki, kiedy należy używać klasy statycznej ponad klasę instancji?

Może ktoś proszę podać wytyczne, standardowe punkty kontrolne na kiedy tworzyć statyczną klasę i kiedy do tworzenia instancji klasy.

Zasadniczo wiele razy widzę podczas pisania kodu, że to samo można było zrobić przy użyciu klasy statycznej i metod, i dezorientuje mnie wiele rzeczy.

tej pory wiem, poniżej punktach kontrolnych:

  1. Jeśli obiekt pod uwagę może istnieje tylko raz w całej aplikacji to przyjdzie pod „static”

  2. Jeśli metoda nie korzysta dowolna zmienna pola wewnątrz niego może być metodą statyczną.

+1

Czy to pomaga? http://stackoverflow.com/questions/241339/when-to-use-static-classes-in-c-sharp – kendaleiv

+0

Ostatnio blogowałem o tej sprawie http://www.sapiensworks.com/blog/post/ 2012/03/02/When-To-Use-The-Static-Keyword-In-Net.aspx – MikeSW

Odpowiedz

1

Klasy statyczne są najlepiej wykorzystywane do tworzenia bibliotek funkcji, która zostanie wywołana. Regularne klasy są używane do tworzenia obiektów, którymi można manipulować. Pozwala hermetyzować relacje pojedynczej wiązki kodu. Weźmy na przykład punkt w przestrzeni euklidesowej. Możesz zadeklarować dwie jednostki pływające i śledzić je indywidualnie, lub możesz użyć poniższej umowy, aby zadeklarować, jak działa dany punkt.

class Point{ 
    float x; 
    float y; 

    Point(float x, float y); 

    Point halfway(Point other); 

    Line lineThrough(Point other); 

    float distanceFrom(Point other); 

    ... 
} 

Jest nieco zbędny, ale pozwala na pisanie kodu bardziej czytelny w przyszłości - lepiej zachowaniu wszystkich danych obudowane i dobrze zaprojektowane, dzięki czemu można lepiej programator, ponieważ równanie linii przez dwa punkty przechodzi od

float slope = (xone-xtwo)/(yone-ytwo); 
float yintercept = yone-slope*xone; 

do

Point p1 = new Point(xone, yone); 
Point p2 = new Point(xtwo, ytwo); 
Line linethrough = p1.lineThrough(p2); 

przepraszam pseudokod jest Java nieco poinformowany. Mam Java w mózgu.

17

Moim zdaniem najlepszym wyróżnikiem jest stan.

Jeśli klasa ma stan i jest po prostu szereg pokrewnych metod, które, gdy podane dane wejściowe, które daje moc wtedy masz doskonałym kandydatem do klasy statycznej.

Jeśli klasa otrzyma wejście, a następnie zapisać go albo w jakiś inny sposób będzie można oczekiwać, aby utrzymać swój obecny stan to masz regularne zajęcia.

Co więcej, jeśli twoja klasa zostanie zadeklarowana jako abstract lub będzie dziedziczyć zachowania z innej klasy lub implementować zachowania z interfejsu, to odejdziesz od klasy statycznej i masz normalną klasę.

W skrócie:

  • Jeśli jest to torba metod lub ma żadne państwo
  • i nie jest abstrakcyjny, dziedziczenia lub wdrożenie interfejsu

Wtedy mam duże szanse, że jest to klasa statyczna :)

Mam nadzieję, że to pomoże.

NB (zgodnie z dokładnym komentarzem poniżej) stan odnosi się do klasy przechowującej niektóre dane, które reprezentują bieżący stan rzeczy dla obiektu. Być może zmienna na poziomie klasy lub właściwość.

+1

brzmi naprawdę dobrze. czasami trudno jest początkującym znać znaczenie stanu .. powiedzmy pola klasy. więc powtarzając to samo: 1.klasa bez zadeklarowanych zmiennych terenowych, 2. klasa musi być częścią hierarchii dziedziczenia. to punkty, dzięki którym klasa stanie się statyczna. – Dhananjay

+0

Doskonały dodatek, dziękuję @dnkulkarni. Zmienię moją odpowiedź :) –

+0

Klasa statyczna może mieć zmienne statyczne. Możesz także chcieć uczynić klasę statyczną, jeśli nie chcesz jej instancji, chociaż klasy statyczne ze statycznymi metodami mogą być łatwo nadużywane przez programistów z procesualny sposób myślenia, który kocha zmienne globalne i funkcje globalne. – MikeSW

0

Jeśli to powinien być zbiór funkcji, to należy użyć klas statycznych. jak:

int result = calculation.add(int p1,int p2); 
float result = calculation.divide(int p1,int p2); 

nie można powiedzieć o zajęciach statycznych:

Calculation mycalculator = new Calculation(); 

ponieważ nie mogą być instancja. Mogą zawierać tylko statyczne elementy.

Zaczerpnięte z here.

ale gdyby był członkiem kodu, jak jabłko na drzewie, użyłbyś klas instancji. każde jabłko ma swoją własną charakterystykę, ale nie zmienia faktu, że jest to jabłko. i jest częścią drzewa, która zawiera wiele instancji jabłka.

Apple apple1 = new Apple(); 
apple1.color = green; 
apple1.age = newborn; 
apple1.fallfromtree(speed); 

Apple apple2 = new Apple(); 
apple2.color = red; 

itp

Możesz zajrzeć here.

Powiązane problemy