Я вхожу в C #, и у меня возникла эта проблема:
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;
}
}
}
}
У меня есть этот код на UserControl:
using MyDataLayer.Section1;
public class MyClass
{
protected void MyMethod
{
MyClass.MyItem oItem = new MyClass.MyItem();
oItem = MyClass.GetItem();
someLiteral.Text = oItem.Property1;
}
}
Все отлично работает, за исключением случаев, когда я иду на доступ Property1
. IntelliSense только дает мне « , и » в качестве опции. При наведении мыши на Visual Studio дает мне следующее объяснение: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
Я не уверен, что это значит, я немного погуглил, но не смог этого понять.
У меня была та же проблема - хотя несколько лет спустя некоторые могут найти несколько полезных указателей:
Не используйте «статический» даром!
Понять, что подразумевается под «статическим» с точки зрения семантики (поведения) и синтаксиса времени исполнения и времени компиляции.
Статическая сущность будет автоматически создана за некоторое время до
ее первого использования.
Статическому объекту выделено одно хранилище, которое
используется всеми, кто имеет доступ к этому объекту.
Доступ к статическому объекту возможен только через имя его типа, а не
через экземпляр этого типа.
Статический метод не имеет неявного аргумента this, как и метод экземпляра. (И поэтому у статического метода меньше
накладных расходов на выполнение - одна из причин их использования.)
Подумайте о безопасности потоков при использовании статических объектов.
Некоторые подробности по статике в MSDN:
источник
Нет необходимости использовать статические в этом случае, как подробно объяснено. Вы могли бы также инициализировать свою собственность без
GetItem()
метода, пример обоих ниже:Потребление:
источник
Это означает, что вы вызываете метод STATIC и передаете ему экземпляр. Самое простое решение - удалить Static, например:
public
staticvoid ExportToExcel (IEnumerable data, string sheetName) {источник
Я знаю, что это старая тема, но я потратил 3 часа, пытаясь выяснить, в чём была моя проблема. Обычно я знаю, что означает эта ошибка, но вы можете столкнуться с этим и более тонким способом. Моя проблема заключалась в том, что мой класс клиента (тот, который вызывал статический метод из класса экземпляра) имел свойство другого типа, но называлось так же, как статический метод. Ошибка, сообщенная компилятором, была такой же, как здесь, но проблема была в основном в конфликте имен.
Если кто-то еще получит эту ошибку и ничего из вышеперечисленного не поможет, попробуйте полностью указать класс вашего экземпляра с именем пространства имен. .. () чтобы компилятор мог видеть точное имя, которое вы имеете в виду.
источник
Проверьте, содержит ли ваш код пространство имен, наиболее правая часть которого соответствует вашему статическому имени класса.
Учитывая статический класс Bar , определенный в пространстве имен Foo , реализующий метод Jump или свойство, скорее всего, вы получаете ошибку компилятора, потому что на Bar есть еще одно пространство имен, заканчивающееся . Да, рыбные штучки ;-)
Если это так, это означает, что вы используете панель использования; и вызов Bar.Jump () , поэтому одно из следующих решений должно соответствовать вашим потребностям:
В моем случае произошла следующая ошибка компилятора в проекте репозитория EF ( Entity Framework ) при вызове Database.SetInitializer () :
Эта ошибка возникла, когда я добавил MyProject.ORM. Пространство имен базы данных , суффикс ( Database ) которого, как вы могли заметить, соответствует имени класса Database .SetInitializer .
При этом, поскольку у меня нет контроля над статическим классом EF Database, и я также хотел бы сохранить свое пользовательское пространство имен, я решил полностью квалифицировать статический класс EF Database с его пространством имен System.Data.Entity , в результате чего использовалась следующая команда, которая компиляция удалась:
Надеюсь, поможет
источник
Я получил здесь поиск в Google для ошибки компилятора C # CS0176, из-за (дубликата) вопроса .
В моем случае ошибка произошла, потому что у меня был статический метод и метод расширения с тем же именем. Для этого см. Статический метод и метод расширения с одинаковым именем .
[Может быть, это должен был быть комментарий. Извините, что у меня пока недостаточно репутации.]
источник
Это вызывает ошибку:
Это исправление:
Объяснение:
Вы не можете вызвать статический метод из экземпляра объекта. Весь смысл статических методов заключается не в том, чтобы быть привязанным к экземплярам объектов, а в том, чтобы сохранять его через все экземпляры этого объекта и / или использовать без каких-либо экземпляров объекта.
источник
Ваше статическое поле будет выглядеть так:
Из другого класса вы можете получить доступ к полю staic следующим образом:
источник