2012-05-23 11 views
3

Quels sont les avantages de la classe non statique par rapport à la classe statique?Quels sont les avantages de la classe non statique par rapport à la classe statique?

La classe statique n'a pas besoin d'être instanciée. donc nous pouvons utiliser directement ClassName.MemberName, alors quelle est l'utilisation de la classe non statique

+2

Vous pouvez également utiliser directement 'NomClasse.NomMembre' si NomNom est statique mais que la classe ne l'est pas. Rendre les classes statiques lorsque vous n'en créez pas (et ne le créeront jamais). C'est un must pour les classes d'extension. –

+1

Donc, il n'y a jamais qu'un seul nom de membre? Utiliser des classes statiques comment implémenter 'Personne'? –

+1

Commencez par http://stackoverflow.com/questions/576853/what-is-the-use-of-a-static-class – V4Vendetta

Répondre

1

Une classe statique est fondamentalement identique à une classe non statique, mais il y a une différence: une classe statique ne peut pas être instanciée. En d'autres termes, vous ne pouvez pas utiliser le nouveau mot-clé pour créer une variable du type de classe. Parce qu'il n'y a aucune variable d'instance, vous accédez aux membres d'une classe statique en utilisant le nom de classe lui-même

Une classe statique a une seule instance de la classe elle-même afin que vous ne pouvez pas créer plusieurs instance d'une classe statique.

regardant votre question, vous ne pouvez pas définir deux valeurs différentes pour la propriété ci-dessous si la classe est statique car il n'y aura qu'une seule instance de ClassName en mémoire

ClassName.MemberName 

plus d'infos sur

http://msdn.microsoft.com/en-us/library/79b3xss3.aspx

0

Un avantage de la classe non statique est que les classes statiques sont horribles au test unitaire - elles ne peuvent pas être facilement manipulées et ne supportent pas les interfaces.

2

Dites que vous devez stocker des informations et des opérations encapsulate un employé. Maintenant, disons que votre programme doit comparer deux employés simultanément?

Exactement! Avec une classe d'employés non statique, vous pouvez instancier deux (ou plus) instances de la classe Employee, chacun de ces objects représentant un employé différent.

Vous ne pouviez pas faire cela de l'employé était statique.

par exemple.

void CompareEmployees(Employee empA, Employee empB) 
{ 
    if(empA.HourlyRate < empB.HourlyRate) 
     Console.WriteLine("Employee {0} has a higher rate than {1}", empA.Name, empB.Name); 

    else if(empA.HourlyRate > empB.HourlyRate) 
     Console.WriteLine("Employee {0} has a higher rate {1}", empb.Name, empA.Name); 
    else 
     Console.WriteLine("{0} and {1} have the same rate", empb.Name, empA.Name); 
} 
1

Pensez d'une classe comme un plan de construction et instances de cette classe (objets) que les bâtiments construits selon la conception dans le plan. Avec un plan, vous pouvez créer de nombreux bâtiments. Chacun de ces bâtiments a la même structure, mais chacun est indépendant - on pourrait avoir sa porte ouverte tandis qu'un autre a sa porte fermée. Une classe statique est comme un plan qui ne peut jamais être utilisé pour construire des maisons. Vous pouvez toujours faire des choses comme déchirer ou renverser du café dessus, mais vous ne pourriez jamais ouvrir la porte sur le plan, car il n'y a pas de porte, seulement le design d'une porte.

Une autre façon de décrire cette situation est de considérer «état». Un bâtiment (objet) a un certain état (par exemple si la porte est ouverte ou non) et l'état de chaque bâtiment peut être différent (par exemple si sa propre porte est ouverte). Un plan (classe) peut également avoir un état (statique) (par exemple si le café a été renversé dessus ou non) mais ceci est différent et séparé de l'état associé aux bâtiments construits selon le plan.

public class House { 
    private static boolean isCoffeeSpilt; 

    private boolean isDoorOpen; 

    public static void spillCoffee() { 
     House.isCoffeeSpilt = true; 
    } 

    public void openDoor() { 
     isDoorOpen = true; 
    } 
} 

public static class Program { 
    public static void main(String[] args) { 
     House redHouse = new House(); // 1 
     House blueHouse = new House(); // 2 

     redHouse.openDoor();   // 3 

     House.spillCoffee();   // 4 
    } 
} 

Dans l'exemple ci-dessus, les lignes 1, 2 et 3 ne serait pas possible si House était une classe statique. Notez que openDoor est appelée sur une instance de House tandis que spillCoffee est appelée sur la classe elle-même. Notez également qu'au point 4 la porte de la maison rouge est ouverte mais la porte de la maison bleue est toujours fermée.

0

Une classe statique ne peut pas être instanciée (techniquement, mais seulement une fois), et le constructeur statique est appelé "habituellement" lors du premier accès à la classe, ce qui peut être difficile à suivre et à coordonner. Les classes statiques sont bonnes si vous voulez une classe qui rassemble simplement des méthodes utilitaires. Les maths dans le framework .net sont un bon exemple. En outre, ils sont utiles pour extension methods. D'ailleurs je ne les utilise pas.

Si vous avez besoin d'une seule instance et que vous ne voulez pas être lié aux contraintes d'une classe statique, le modèle Singleton est très utile. A nice article sur la différence entre les Singletons et les classes statiques.

Et bien sûr, une classe non statique doit être instanciée, stockée dans une variable et peut être instanciée plusieurs fois.

Exemple:

Une classe statique, juste des méthodes auxiliaires pour le chargement d'un fichier:

static class TextureHelper 
{ 
    public static byte[] LoadFromFile(string aFileName); 
} 

un Singleton qui est le principal point de créer des textures.

public sealed class TextureManager 
{ 
    public static TextureManager Instance{get;set;} 

    public Texture CreateTexture(); 
} 

une texture réelle, dont je pourrais avoir beaucoup de dans mon application.

public class Texture 
{ 

} 
Questions connexes