我正在进入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
的时候。智能感知只给我提供"Equals
,GetHashCode
,GetType
和ToString
“作为选项。当我把鼠标移到oItem.Property1
上时,Visual Studio给了我这样的解释:
Member
MyDataLayer.Section1.MyClass.MyItem.Property1.getcannot be accessed with an instance reference, qualify it with a type name instead
我不确定这是什么意思,我用谷歌搜索了一下,但没能弄明白。
发布于 2009-07-08 19:13:28
在C#中,与VB.NET和Java不同,您不能使用实例语法访问static
成员。您应该执行以下操作:
MyClass.MyItem.Property1
引用该属性或从Property1
中删除static
修饰符(这可能是您想要做的)。以获得关于static
is, see my other answer的概念。
发布于 2009-07-08 19:19:38
只能使用类型的名称访问静态成员。
因此,您需要编写以下代码,
MyClass.MyItem.Property1
或者(这可能是您需要做的)通过从其定义中删除static
关键字来使Property1
成为实例属性。
静态属性在其类的所有实例之间共享,因此它们只有一个值。按照现在的定义方式,创建MyItem类的任何实例都没有意义。
发布于 2013-08-23 00:44:50
我也遇到了同样的问题--尽管几年后,有些人可能会发现一些提示很有帮助:
不要无端使用‘static’!
理解“静态”在运行时和编译时语义(行为)和语法方面的含义。
它的第一个用法。
由访问该实体的所有用户共享。
开销-使用它们的一个原因。)
关于MSDN中的静态的一些细节:
https://stackoverflow.com/questions/1100009
复制相似问题