C# 关于静态行为
从静态函数,我们可以创建一个实例,但我们不能访问任何非静态数据成员…为什么C# 关于静态行为,c#,C#,从静态函数,我们可以创建一个实例,但我们不能访问任何非静态数据成员…为什么 public static DropoffType DROP_BOX { get { DropoffType tempType = new DropoffType(); tempType.DropoffTypeSelected = _DROP_BOX; y=11;
public static DropoffType DROP_BOX
{
get
{
DropoffType tempType = new DropoffType();
tempType.DropoffTypeSelected = _DROP_BOX;
y=11; // compile time error
return tempType;
}
}
从上面的代码中,我们可以看到可以从属性创建实例,但是当我们试图访问任何非静态数据成员时,我得到了complile time错误。任何人都可以详细解释为什么可以从任何位置创建实例,但不能从静态函数访问非静态数据成员。因为静态函数没有绑定到特定的对象实例。您可以从静态成员访问实例成员,只要指定您正在谈论的实例大约 假设
y
是DROP_BOX属性(顺便说一句,属性名)包含类类型中的实例变量,您希望哪个实例更改其状态
请记住,实例成员与类型的特定实例相关,而静态成员与类型本身相关,而不是与特定实例相关
如果你能给出一个更完整的例子,说明你有什么问题,我们可能会提供更多帮助
有关更多信息,请参见。如果
y
是一个实例字段,则在不告诉它您指的是哪个对象的情况下,您无法访问它。对于实例成员,有一个隐式的this.
,即this.y
只需添加:
tempType.y = 11;
问题是,您可能有任意数量的变量和对象。即使对于一个实例方法,您也经常需要消除歧义,即
public int CompareTo(Foo other) {
return string.Compare(this.Bar, other.Bar);
}
(在上面的
中,this.
不是严格需要的,但对读者IMO有帮助;其他。
是完全必要的)静态函数只能访问静态成员,因为您可以创建任意数量的对象,静态成员不属于实例,而是属于类
说你喜欢
var x1 = new DropoffType();
var x2 = new DropoffType();
DropoffType.SomeStaticFunction();
并且静态功能设置
y=11
。哪个对象应该获得您设置的状态?没有一个全部的最后一个?第一个?这可能应该作为的副本关闭,但我不确定。。。