2017-06-24 2 views
0

Je comprends que nous pourrions utiliser la classe name.method mais je me demandais s'il y avait un moyen de le faire à travers une instance. Pouvez-vous me donner un exemple aussi. La raison pour laquelle je demande est parce que mon professeur a dit:comment appeler méthode statique à l'intérieur de la méthode non statique à travers l'instance

Vous devez appeler la méthode d'extension à l'aide d'appels qui utilisent le formulaire d'appel statique et le formulaire d'appel d'instance

+1

Non, vous ne pouvez pas faire cela. Pourquoi voudriez-vous de toute façon? –

+0

@ThomasLevesque mon professeur dans ses directions a dit: Vous devez invoquer la méthode d'extension en utilisant des appels qui utilisent le formulaire d'appel statique et le formulaire d'appel d'instance – Brogrammer

+1

N'a pas de sens. Lorsque vous avez une propriété statique dans une classe, il n'y a qu'une instance de la propriété dans la classe que toutes les instances du partage de classe. – jdweng

Répondre

1

Avec l'édition que ce parler de extension méthodes, alors il devient plus facile!

Avec le même exemple que ci-dessous:

bool hasValue1 = s.HasValue(); // use the instance syntax 
bool hasValue2 = StringExtensions.HasValue(s); // use the static syntax 

Notez que ceux-ci sont identiques à 100%; Une fois compilé en IL, vous ne pouvez pas déterminer quel formulaire a été utilisé.


Réponse courte: "non", par CS0176:

CS0176 membre '{name}' ne peut pas être accessible avec une référence d'instance; si vous vraiment voulez faire, peut-être des méthodes d'extension sont ce que vous cherchez;: se qualifier avec un nom de type à la place

Légèrement plus réponse par exemple:

static class StringExtensions 
{ 
    public static bool HasValue(this string value) 
    { 
     return !string.IsNullOrEmpty(value); 
    } 
} 
class Program 
{ 
    static void Main() 
    { 
     string s = /* some string or null reference */ 
     bool hasValue = s.HasValue(); 
    } 
} 
+0

Je reçois une erreur quand j'essaie de faire des chaînes s puis de faire s. "Classe de méthodes statique" dire la chaîne ne contient pas la définition de ma méthode statique et aucune méthode d'extension. – Brogrammer

+0

@Brogrammer en effet - vous devez créer la méthode d'extension, ce que je fais dans la classe 'StringExtensions' dans l'exemple - le modificateur' this' avant que le premier paramètre ne dénote une méthode d'extension. Peut-être serait-il plus clair si je changeais le nom de la méthode dans mon exemple - je le ferai maintenant ... –

+0

@Brogrammer ... done - J'ai inversé ('!') La valeur de retour et changé la méthode d'extension en être 'HasValue' –