- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我经常发现自己实现了一个类,它维护某种自己的状态属性作为枚举:我有一个 Status 枚举和一个 Status 类型的 Status 属性。我应该如何解决这个名称冲突?
public class Car
{
public enum Status
{
Off,
Starting,
Moving
};
Status status = Status.Off;
public Status Status // <===== Won't compile =====
{
get { return status; }
set { status = value; DoSomething(); }
}
}
如果 Status 枚举对于不同的类型是通用的,我会把它放在类之外,问题就会得到解决。但 Status 仅适用于 Car,因此在类外声明枚举没有意义。
在这种情况下,您使用什么命名约定?
注意:这个问题在 this question 的回答评论中进行了部分辩论。 .因为这不是主要问题,所以它没有得到太多关注。
编辑:Filip Ekberg 建议针对“状态”的特定情况使用 IMO 出色的解决方法。然而,我很想阅读枚举/属性名称不同的解决方案,如 Michael Prewecki 的回答。
EDIT2(2010 年 5 月):我最喜欢的解决方案是将枚举类型名称复数化,正如 Chris S 所建议的那样。根据 MS 指南,这应该仅用于标志枚举。但我越来越喜欢它了。我现在也将它用于常规枚举。
最佳答案
“关闭”、“开始”和“移动”的定义就是我所说的“状态”。当您暗示您正在使用“状态”时,它就是您的“状态”。所以!
public class Car
{
public enum State
{
Off,
Starting,
Moving
};
State state = State.Off;
public State Status
{
get { return state ; }
set { state= value; DoSomething(); }
}
}
如果我们从上面提到的您想要使用“Type”这个词的地方再举一个例子,比如在这种情况下:
public class DataReader
{
public enum Type
{
Sql,
Oracle,
OleDb
}
public Type Type { get; set; } // <===== Won't compile =====
}
你真的需要看看枚举和枚举之间的区别,对吧?但是在创建框架或谈论架构时,您需要关注相似性,好吧,让我们找到它们:
当某物被设置为状态时,它被定义为“事物”状态
示例:汽车的状态为运行状态、停止状态等。
你想在第二个例子中实现的是这样的:
myDataReader.Type = DataReader.Database.OleDb
您可能认为这与我一直向其他人宣扬的内容相反,您需要遵循一个标准。但是,您正在遵循一个标准! Sql 案例也是一个特定案例,因此需要一个稍微特定的解决方案。
但是,枚举可以在您的 System.Data
空间中重复使用,这就是模式的意义所在。
另一种使用“类型”的情况是“动物”,其中类型定义了物种。
public class Animal
{
public enum Type
{
Mammal,
Reptile,
JonSkeet
}
public Type Species{ get; set; }
}
这是遵循一种模式,您不需要特别“知道”这个对象,也没有指定“AnimalType”或“DataReaderType”,您可以在您选择的命名空间中重新使用枚举。
关于枚举和匹配属性的 C# 命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/495051/
你能比较一下属性吗 我想禁用文本框“txtName”。有两种方式 使用javascript,txtName.disabled = true 使用 ASP.NET, 哪种方法更好,为什么? 最佳答案 我
Count 属性 返回一个集合或 Dictionary 对象包含的项目数。只读。 object.Count object 可以是“应用于”列表中列出的任何集合或对
CompareMode 属性 设置并返回在 Dictionary 对象中比较字符串关键字的比较模式。 object.CompareMode[ = compare] 参数
Column 属性 只读属性,返回 TextStream 文件中当前字符位置的列号。 object.Column object 通常是 TextStream 对象的名称。
AvailableSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。 object.AvailableSpace object 应为 Drive 
Attributes 属性 设置或返回文件或文件夹的属性。可读写或只读(与属性有关)。 object.Attributes [= newattributes] 参数 object
AtEndOfStream 属性 如果文件指针位于 TextStream 文件末,则返回 True;否则如果不为只读则返回 False。 object.A
AtEndOfLine 属性 TextStream 文件中,如果文件指针指向行末标记,就返回 True;否则如果不是只读则返回 False。 object.AtEn
RootFolder 属性 返回一个 Folder 对象,表示指定驱动器的根文件夹。只读。 object.RootFolder object 应为 Dr
Path 属性 返回指定文件、文件夹或驱动器的路径。 object.Path object 应为 File、Folder 或 Drive 对象的名称。 说明 对于驱动器,路径不包含根目录。
ParentFolder 属性 返回指定文件或文件夹的父文件夹。只读。 object.ParentFolder object 应为 File 或 Folder 对象的名称。 说明 以下代码
Name 属性 设置或返回指定的文件或文件夹的名称。可读写。 object.Name [= newname] 参数 object 必选项。应为 File 或&
Line 属性 只读属性,返回 TextStream 文件中的当前行号。 object.Line object 通常是 TextStream 对象的名称。 说明 文件刚
Key 属性 在 Dictionary 对象中设置 key。 object.Key(key) = newkey 参数 object 必选项。通常是 Dictionary 
Item 属性 设置或返回 Dictionary 对象中指定的 key 对应的 item,或返回集合中基于指定的 key 的&
IsRootFolder 属性 如果指定的文件夹是根文件夹,返回 True;否则返回 False。 object.IsRootFolder object 应为&n
IsReady 属性 如果指定的驱动器就绪,返回 True;否则返回 False。 object.IsReady object 应为 Drive&nbs
FreeSpace 属性 返回指定的驱动器或网络共享对于用户的可用空间大小。只读。 object.FreeSpace object 应为 Drive 对象的名称。
FileSystem 属性 返回指定的驱动器使用的文件系统的类型。 object.FileSystem object 应为 Drive 对象的名称。 说明 可
Files 属性 返回由指定文件夹中所有 File 对象(包括隐藏文件和系统文件)组成的 Files 集合。 object.Files object&n
我是一名优秀的程序员,十分优秀!