gpt4 book ai didi

枚举和匹配属性的 C# 命名约定

转载 作者:IT王子 更新时间:2023-10-29 03:37:10 26 4
gpt4 key购买 nike

我经常发现自己实现了一个类,它维护某种自己的状态属性作为枚举:我有一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com