声明静态枚举时出现问题,C#
嗨,我正在尝试定义一个静态枚举,如下所示:声明静态枚举时出现问题,C#,c#,static,enums,C#,Static,Enums,嗨,我正在尝试定义一个静态枚举,如下所示: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace Lds.CM.MyApp.Controllers { public class MenuBarsController : Controller { // Menu Bar enums
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Lds.CM.MyApp.Controllers
{
public class MenuBarsController : Controller
{
// Menu Bar enums
public static enum ProfileMenuBarTab { MainProfile, Edit, photoGallery }
public ActionResult cpTopMenuBar(string tabSelected)
{
...
"
但我得到了以下错误:“修饰符‘static’对该项无效。”
我知道这很简单,但我似乎看不出问题所在。非常感谢!取出
静态
枚举是类型,不是成员;没有静态或非静态枚举的概念 您可能试图为您的类型创建一个静态字段,但这与类型声明无关。
(尽管您可能不应该创建静态字段)
另外,.您正在尝试使枚举声明为静态的,即类型为
ProfileMenuBarTab
的字段,以声明类(或任何类型)在类中,去掉static。枚举是一种类型,而不是一个值。修饰符static
在那里没有多大意义。枚举是类型,而不是变量。因此它们在每个定义中都是“静态的”,您不需要关键字
public enum ProfileMenuBarTab { MainProfile, Edit, PhotoGallery }
不需要将其定义为静态。编译枚举类型时,C#编译器会将每个符号转换为该类型的常量字段。例如,编译器会处理前面显示的颜色枚举 就像您编写了类似于以下内容的代码一样:
internal struct Color : System.Enum {
// Below are public constants defining Color's symbols and values
public const Color White = (Color) 0;
public const Color Red = (Color) 1;
public const Color Green = (Color) 2;
public const Color Blue = (Color) 3;
public const Color Orange = (Color) 4;
// Below is a public instance field containing a Color variable's value
// You cannot write code that references this instance field directly
public Int32 value__;
}
Net中的类型可以是值类型或引用类型 值类型->
枚举
、结构
和内置值类型
(布尔、字节、短、整数、长、sbyte、ushort、uint、ulong、字符、双精度、十进制)
引用类型->类
,接口
,委托
,动态
和字符串
因此,正如您所看到的,枚举是类型(如类
和结构
,等
)。更准确地说,它们是值类型。关于值类型的一个重要点是,您应该能够从它们创建实例。例如,int
这是一个结构的好处是什么(值类型)如果您不能创建一个实例来存储2、3或其中的任何数字
这是一般规则->不能使用静态
修饰符创建自定义值类型(枚举
和结构
)
一些要点:
- 如果直接在
命名空间中编写
或枚举
,则不能像其他类型一样将它们标记为结构
或私有
。它们可以像其他类型一样是受保护
或公共
内部
- 如果您直接在
类中编写
或枚举
,您也可以将它们标记为结构
或私有
,因为您可以将它们标记为受保护
和内部
公共
对于内部类型就像是类
对于类型,除非您可以标记内部类型也可以输入命名空间
或私有
公共
IEnumerator
implementation)与枚举无关。“嵌套枚举数和受保护类型不受此规则的约束。"@SLaks,他有一个公共枚举,你发布了一个链接,上面说不要公开嵌套类型,我只是指出,根据你链接的页面,枚举是免税的,所以可以公开。对于和类一样,类也是一个类型,可以是静态的。既然你不能用该类的实例访问该枚举,它肯定是静态的tic,因此应该使用static修饰符,其他一切都是不一致的,但它是C#…枚举定义为“静态”,但我们不能在静态类内使用它为什么?@user2323308 10.1.1.3静态类静态类不能实例化,不能用作类型,只能包含静态成员…静态类可以仅包含静态成员(§10.3.7)。请注意,常量和嵌套类型被分类为静态成员。10.3.7类的静态成员和实例成员是静态成员或实例成员……常量或类型声明隐式声明静态成员。参考: