J'ai donc une fonction:
List<string> names = new string(); private static void getName(string name) { names.add(name); }
5 Réponses :
Vous devez faire des noms code> statiques si vous souhaitez l'utiliser à partir de l'intérieur d'une méthode statique: Le problème est que getname code> est défini sur votre type em>, pas sur une instance du type. Cependant,
noms code> est défini pour chaque instance em> de votre type obtient sa propre valeur. P> p>
@Drake: Vous pouvez accéder aux membres statiques des instances, mais pas l'inverse.
Les méthodes statiques ne peuvent pas accéder à des champs de classe. Soit faire des noms statiques ou rendre getname () non statique. Qu'entendez-vous par «compatible». Demandez-vous ... La méthode doit-elle être statique? Quel est son but et comment avez-vous l'intention de l'utiliser? P>
Vous ne pouvez pas y accéder de cette façon, vous devez instancier la classe contenant un membre. P>
Vous devez dire au système que em> liste des noms qui vous intéressent. Cela fait partie de l'état d'un objet, une instance de la classe ... mais lequel? Peut-être que vous avez créé plusieurs instances em> de la classe - peut-être que vous avez créé no em> les instances de la classe. La méthode statique n'a aucune visibilité de cela - de sorte que l'instance souhaitez-vous que la valeur de la valeur de la variable code> code> de? Pour le mettre dans un autre exemple, supposons que nous ayons une classe comme celle-ci: public class Person
{
public double MassInGrams { get; set; }
public double HeightInMetres { get; set; }
public static double ComputeBodyMassIndex()
{
// Which person are we interested in?
}
}
Person p1 = new Person { MassInGrams = 76203, HeightInMetres = 1.8 };
Person p2 = new Person { MassInGrams = 65000, HeightInMetres = 1.7 };
double bmi = Person.ComputeBodyMassIndex();
Pouvez-vous expliquer la solution de méthode d'instance un peu plus. En utilisant l'exemple que j'ai créé. Je crois que les noms sont actuellement une référence.
@Drake: noms code> serait une référence à une instance
Personne code> d'un exemple qui devrait démontrer pourquoi il y a un problème. Une fois que vous avez compris le problème, vous pouvez avoir plus d'une idée de quoi faire.
@Drake - Afin de ComputebodyMassindex () Code> Le système doit savoir quelle personne doit calculer. Donc, vous passez dans un objet personne et votre
ComputebodyMassindex () code> prend maintenant cette personne
Static Double ComputebodyMassIndex (Personne P) Code> On peut calculer l'IMC. Dans votre cas, vous souhaitez ajouter un
chaîne code> à une liste
noms code> fait partie de la classe, lorsque vous créez un objet de cette classe, vous pouvez accéder aux noms directement.
Ce n'est pas une fonction que j'appelle donc cela ne serait pas applicable. C'est une fonction de rappel Win32 que j'ai besoin d'accéder. Le rappel est statique, ma liste n'est pas.
@Drake: Ce n'est pas clair exactement ce que vous voulez dire lorsque vous dites que c'est une fonction de rappel Win32. Voulez-vous dire que c'est quelque chose que vous passez d'une manière ou d'une autre dans une fonction Win32 en tant que délégué, et elle s'appelle-t-elle? Si tel est le cas, faites-en simplement une méthode d'instance et construisez un délégué approprié avec la bonne cible.
noms code> est un objet qui existera dans les cas de la classe E.G.
MyClass MC = Nouveau MyClass (); code> Vous pouvez accéder à
MC.NAMES CODE>. Un champ statique peut être appelé sans instance de la classe juste avec le nom de classe, par ex.
myClass.getName (""); code> fonctionnera. Donc, lorsque vous pensez logiquement, la classe ne contient pas de noms, uniquement les «instances de cette classe» le contiennent. Par conséquent, vous apportez également cette liste statique aussi et ce sera «la même instance de liste» partout lorsque vous appelez
myClass.Names CODE> ou effectuez la méthode getName non statique, et cela ne sera appelé que des instances , Par conséquent, aucun
myClass.getName ("") code> sera possible, mais
mc.getname (""); code> C'est une question de ce que vous essayez exactement de faire. < / p>
Pourquoi GetName Static est-il en premier lieu?
C'est une situation simplifiée hypothétique.
Le nom de la méthode doit être
addname (nom de chaîne) code>.