J'entre en C # et j'ai ce problème:
namespace MyDataLayer
{
namespace Section1
{
public class MyClass
{
public class MyItem
{
public static string Property1{ get; set; }
}
public static MyItem GetItem()
{
MyItem theItem = new MyItem();
theItem.Property1 = "MyValue";
return theItem;
}
}
}
}
J'ai ce code sur un UserControl:
using MyDataLayer.Section1;
public class MyClass
{
protected void MyMethod
{
MyClass.MyItem oItem = new MyClass.MyItem();
oItem = MyClass.GetItem();
someLiteral.Text = oItem.Property1;
}
}
Tout fonctionne bien, sauf quand je vais accéder Property1
. Le IntelliSense ne me donne « , et » en option. Lorsque je passe la souris sur , Visual Studio me donne cette explication:Equals
GetHashCode
GetType
ToString
oItem.Property1
Member
MyDataLayer.Section1.MyClass.MyItem.Property1.getcannot be accessed with an instance reference, qualify it with a type name instead
Je ne sais pas ce que cela signifie, j'ai fait quelques recherches sur Google mais je n'ai pas pu le comprendre.
J'ai eu le même problème - bien que quelques années plus tard, certains puissent trouver quelques conseils utiles:
N'utilisez pas «statique» gratuitement!
Comprendre ce que «statique» implique en termes de sémantique (comportement) et de syntaxe au moment de l'exécution et de la compilation.
Une entité statique sera automatiquement construite quelque temps avant
sa première utilisation.
Une entité statique a un emplacement de stockage alloué, qui est
partagé par tous ceux qui accèdent à cette entité.
Une entité statique est uniquement accessible via son nom de type, et non
via une instance de ce type.
Une méthode statique n'a pas d'argument implicite «ceci», tout comme une méthode d'instance. (Et donc une méthode statique a moins de temps d'exécution
- une raison de les utiliser.)
Pensez à la sécurité des threads lorsque vous utilisez des entités statiques.
Quelques détails sur l'électricité statique dans MSDN:
la source
Pas besoin d'utiliser de l'électricité statique dans ce cas comme expliqué en détail. Vous pourriez aussi bien initialiser votre propriété sans
GetItem()
méthode, exemple des deux ci-dessous:Consommant:
la source
Cela signifie que vous appelez une méthode STATIC et lui passez une instance. La solution la plus simple consiste à supprimer Static, par exemple:
public
staticvoid ExportToExcel (données IEnumerable, chaîne sheetName) {la source
Je sais que c'est un vieux fil, mais je viens de passer 3 heures à essayer de comprendre quel était mon problème. Je sais d'ordinaire ce que signifie cette erreur, mais vous pouvez également rencontrer cela de manière plus subtile. Mon problème était que ma classe client (celle qui appelait une méthode statique à partir d'une classe d'instance) avait une propriété d'un type différent mais nommée de la même manière que la méthode statique. L'erreur signalée par le compilateur était la même que celle rapportée ici, mais le problème était essentiellement une collision de noms.
Pour toute autre personne obtenant cette erreur et aucune des réponses ci-dessus, essayez de qualifier entièrement votre classe d'instance avec le nom de l'espace de noms. .. () pour que le compilateur puisse voir le nom exact que vous voulez dire.
la source
Vérifiez si votre code contient un espace de noms qui correspond le mieux à votre nom de classe statique.
Étant donné la classe Bar statique , définie sur l'espace de noms Foo , implémentant une méthode Jump ou une propriété, il est probable que vous receviez une erreur de compilation car il existe également un autre espace de noms se terminant sur Bar . Ouais, des trucs de fishi ;-)
Si c'est le cas, cela signifie que vous utilisez une barre d'utilisation; et un appel Bar.Jump () , par conséquent, l'une des solutions suivantes devrait répondre à vos besoins:
Dans mon cas, l'erreur de compilation suivante s'est produite sur un projet de référentiel EF ( Entity Framework ) sur un appel Database.SetInitializer () :
Cette erreur se produit lorsque j'ai ajouté un MyProject.ORM. Espace de noms de base de données , dont le suffixe ( base de données ), comme vous l'avez peut-être remarqué, correspond au nom de la classe Database .SetInitializer .
En cela, comme je n'ai aucun contrôle sur la classe statique de base de données d'EF et que je voudrais également conserver mon espace de noms personnalisé, j'ai décidé de qualifier complètement la classe statique de base de données d'EF avec son espace de noms System.Data.Entity , ce qui a résulté en utilisant la commande suivante, qui la compilation réussit:
J'espère que ça aide
la source
Je suis arrivé ici sur Google pour rechercher l'erreur de compilateur C # CS0176, via la question (en double) Problème de référence d'instance de membre statique .
Dans mon cas, l'erreur s'est produite car j'avais une méthode statique et une méthode d'extension du même nom. Pour cela, voir Méthode statique et méthode d'extension du même nom .
[Cela aurait pu être un commentaire. Désolé de ne pas avoir encore assez de réputation.]
la source
Cela provoque l'erreur:
C'est la solution:
Explication:
Vous ne pouvez pas appeler une méthode statique à partir d'une instance d'un objet. L'intérêt des méthodes statiques n'est pas d'être lié à des instances d'objets, mais de persister à travers toutes les instances de cet objet et / ou d'être utilisé sans aucune instance de l'objet.
la source
Car votre champ statique ressemblerait à:
À partir d'une autre classe, vous pouvez accéder au champ staique comme suit:
la source