我们可以创建一个实例,但我们无法访问任何非静态数据成员....为什么。
public static DropoffType DROP_BOX
{
get
{
DropoffType tempType = new DropoffType();
tempType.DropoffTypeSelected = _DROP_BOX;
y=11; // compile time error
return tempType;
}
}
从上面的代码我们可以看到实例可以从属性创建,但是当我们尝试访问任何非静态数据成员时,我得到了complile time error。任何人都可以详细解释为什么可以从任何地方创建实例,但非静态数据成员无法从静态函数访问。
答案 0 :(得分:3)
如果y
是一个实例字段,则无法在不告诉 哪个对象 的情况下访问它。对于实例成员,存在隐式this.
,即this.y
。
只需添加:
tempType.y = 11;
问题是,你可以使用任意数量的变量和对象。即使对于实例方法,您也经常需要消除歧义,即
public int CompareTo(Foo other) {
return string.Compare(this.Bar, other.Bar);
}
(在上文中this.
并非严格需要,但有助于读者IMO; other.
是完全必要的)
答案 1 :(得分:2)
您可以从静态成员访问实例成员 - 只要您指定要谈论的实例。
假设y
是DROP_BOX属性的包含类的类型中的实例变量(顺便说一句讨厌属性名称), 实例会指望它改变状态?
请记住,实例成员与该类型的特定实例相关,而静态成员与类型本身相关,而不是与特定实例相关。
如果你能提供一个更完整的例子来解决你遇到的问题,我们可能会提供更多帮助。
有关详细信息,请参阅my answer to a similar question yesterday。
答案 2 :(得分:1)
因为静态函数没有绑定到特定的对象实例。
答案 3 :(得分:1)
静态函数只能访问静态成员,因为您可以创建任意数量的对象,静态成员不属于实例,而属于类。
说你做
var x1 = new DropoffType();
var x2 = new DropoffType();
DropoffType.SomeStaticFunction();
并且静态函数设置y = 11
。哪个对象应该获得您设置的状态?没有?所有?最后一个?第一个?