2012-09-15 2 views
2

Accéder à la méthode statique à partir d'une classe non statique avec objet. Ce n'est pas possible en C#. Où cela est fait par JAVA. Comment ça marche?Accéder à la méthode statique à partir d'une classe non statique possible en java et non en C#

exemple de java

/** 
* Access static member of the class through object. 
*/ 
import java.io.*; 

class StaticMemberClass { 
    // Declare a static method. 
    public static void staticDisplay() { 
     System.out.println("This is static method."); 
    } 
    // Declare a non static method. 
    public void nonStaticDisplay() { 
     System.out.println("This is non static method."); 
    } 
} 

class StaticAccessByObject { 

    public static void main(String[] args) throws IOException { 
     // call a static member only by class name. 
     StaticMemberClass.staticDisplay(); 
     // Create object of StaticMemberClass class. 
     StaticMemberClass obj = new StaticMemberClass(); 
     // call a static member only by object. 
     obj.staticDisplay(); 
     // accessing non static method through object. 
     obj.nonStaticDisplay(); 
    } 
} 

sortie du programme:

This is static method. 
This is static method. 
This is non static method. 

Comment faire cela en C#? merci d'avance ..

Répondre

4

C# référencement interdit une méthode statique par instance.Method, ne Type.Method est acceptable. Pour appeler une méthode statique, vous devez passer par le type, pas une instance.
Dans votre cas, cela signifie que StaticMemberClass.staticDisplay() fonctionne, mais pas obj.staticDisplay().


Lorsqu'une méthode est référencé dans un élément d'accès (§7.6.4) de la forme E.M, si M est une méthode statique, E doit désigner un type contenant M, et si M est une méthode d'instance, E doit indiquer une instance d'un type contenant M.

(C# Language Specification Version 4.0 - 10.6.2 Les méthodes statiques et d'instance)

Lorsqu'un membre statique M est référencé dans un membre d'accès (§7.6.4) de le formulaire E.M, E doit indiquer un type contenant M. Il s'agit d'une erreur de compilation pour E pour désigner une instance.

(C# Language Specification Version 4.0 - 10.3.7 Les membres statiques et d'instance)

3

Vous ne pouvez pas. Vous aurez besoin d'utiliser la classe réelle, dans votre cas

StaticMemberClass.staticDisplay(); 
+0

Mais, comment JAVA s'en occupe-t-il? –

+0

Je ne comprends pas votre question. – Femaref

+0

Je veux dire accéder à la méthode statique avec un objet est possible dans Java. Mais, pas dans C#. pourquoi cette différence? –

0

Vous pouvez créer un membre d'instance pour envelopper l'appel à l'organe statique. Ou faites du membre statique un membre d'instance.

Questions connexes