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
。哪个对象应该获得您设置的状态?没有一个全部的最后一个?第一个?

这可能应该作为的副本关闭,但我不确定。。。