为什么对象实例中的枚举具有静态上下文?

穆斯林本·达欧(Ben Dhaou)

我有以下课程:

public class HandleResourceReferencesParams
{
    public Factory Factory { get; set; }
    public DataObject Resource { get; set; }
    public HandleAction Action { get; set; }

    public enum HandleAction
    {
        Activate,
        Disable,
        Terminate
    }
}

在以下代码中使用该代码:

var parameters = new HandleResourceReferencesParams();
parameters.Factory = context.Factory;
parameters.Resource = resource;
parameters.Action = parameters.HandleAction.Terminate; // Does not compile
HandleResourceReferences(parameters);

通过使用parameters.HandleAction,我得到一个编译错误:

在非静态上下文中无法访问静态枚举“ HandleAction”

枚举显然没有声明为“静态”。当从一个对象实例中引用它时,为什么它具有静态上下文(也是非静态的)?

编辑:我已经找到了提姆提到的解决方案(谢谢)。我只是想了解为什么我会收到此错误。

乔恩·斯基特

错误消息很不幸,但是不幸的是您无法做到这一点……您试图访问类型的成员,而不是该类型实例成员,但是您这样做是为了:通过”实例。

基本上,这段代码无法编译的原因相同:

Thread t = new Thread(...);
t.Start();
t.Sleep(1000); // Nope, Sleep is a static method

所有嵌套类型实际上都是静态成员,因为您不能具有特定于包含类型实例的类型。

根据C#规范,第10.3.7节(重点是我的):

当字段,方法,属性,事件,运算符或构造函数声明包含static修饰符时,它将声明一个静态成员。此外,常量或类型声明会隐式声明一个静态成员。

因此,尽管没有static修饰符,但枚举是该类型的静态成员

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

具有上下文路径的Spring Boot静态内容

为什么perf具有如此高的上下文切换?

为什么静态取决于上下文有不同的含义?

为什么匿名类在静态上下文中有效

为什么片段中的上下文为空?

为什么会出现“无法从静态上下文引用的非静态变量”?

具有非静态上下文的动态调用

为什么在F的上下文中Deferred工厂方法具有返回值

在静态上下文中使用实例方法时,为什么javac会发出“错误:类中的方法无法应用于给定类型”?

为什么这种形式的文字具有似乎取决于上下文的含义?

为什么在Werkzeug中必须绑定上下文

为什么函数B的执行上下文不会将其激活对象传递给函数作为范围链对象,所以A具有对B变量的访问权限

AIML-上下文-为什么上下文在所有情况下都不具有最高优先级?

为什么特征不能具有上下文边界参数

为什么片段的上下文在lifecycleScope中为空

有什么方法可以在v8上下文的全局对象中拦截函数定义?

为什么Catalyst中具有多个PSGI应用程序的授权上下文不起作用?

为什么编译器允许在静态上下文中创建非静态类的对象?

Robolectric中的getSystemService返回具有空上下文的对象

为什么我的数组没有上下文?

为什么我的 Ember 组件中的 .then() 中没有“this”上下文

为什么具有域上下文的 FindByIdentity 忽略参数中的本地机器名称?

没有正确的上下文......为什么?

在静态方法中实例化非静态类(上下文),构造函数以对象类型为参数

为什么只有部分上下文菜单会触发 WPF 中的关联命令?

新的对象实例复制方法具有未定义的上下文。(抱歉标题误导)

为什么这是一个静态上下文?

为什么我的上下文中有一个空对象?

Akka 流 - 为什么没有删除上下文?