C#如何在类中使用get、set和use enum
我有一个使用类存储设置的程序。我需要它来使用set和get函数来更改和存储设置。我已经试过了,但没有成功。有人能帮我做这个吗C#如何在类中使用get、set和use enum,c#,class,enums,int,boolean,C#,Class,Enums,Int,Boolean,我有一个使用类存储设置的程序。我需要它来使用set和get函数来更改和存储设置。我已经试过了,但没有成功。有人能帮我做这个吗 private enum _Difficulty { Easy, Normal, Hard }; public void SetDifficulty(Difficulty) { _Difficulty = Difficulty; } public enum GetDifficulty() {
private enum _Difficulty { Easy, Normal, Hard };
public void SetDifficulty(Difficulty)
{
_Difficulty = Difficulty;
}
public enum GetDifficulty()
{
return _Difficulty;
}
在具有get
和set
的类中,是否无法使用enums
我还需要使用
bool
和int
这有几个地方不对劲:
- 枚举是私有的,但方法是公共的。因此,不能将方法返回类型设为枚举类型,也不能将参数设为该类型
- 您的
方法的参数为setDemobility
——这是指参数名还是类型Demobility
- 您的
方法正在尝试设置类型而不是字段setDemobility
- 您的
方法试图使用getDemobility
作为返回类型,然后返回类型而不是字段enum
enum
声明所声明的内容感到困惑-它不是声明字段,而是声明类型(并指定该类型的命名值)
我怀疑你想要:
// Try not to use nested types unless there's a clear benefit.
public enum Difficulty { Easy, Normal, Hard }
public class Foo
{
// Declares a property of *type* Difficulty, and with a *name* of Difficulty
public Difficulty Difficulty { get; set; }
}
如果您真的想让代码看起来像Java而不是C,那么可以使用get/set方法:
我不确定你是否正确使用了它们。这可能有助于
private enum Difficulty { Easy, Normal, Hard };
private Diffuculty theDifficulty;
public void SetDifficulty(difficulty d)
{
theDifficulty = difficulty;
}
public Difficulty GetDifficulty()
{
return theDifficulty;
}
枚举是一种类型而不是变量。类似这样的方法会奏效:
public enum Difficulty { Easy, Normal, Hard };
private Difficulty _Difficulty;
public void SetDifficulty(Difficulty difficulty )
{
_Difficulty = Difficulty;
}
public Difficulty GetDifficulty()
{
return _Difficulty;
}
或者更简洁地说,作为自动属性:
private Difficulty Difficulty {get; set;}
请注意,如果要从公共方法访问枚举,则必须将其设置为公共的。要使用的枚举必须是公共的。您还需要该枚举的实例来存储您正在设置的值,您当前正在将其设置为您的枚举声明。然后,您希望对类存储的内容和传入的内容使用相同的枚举类型
public enum Difficulty { Easy, Normal, Hard };
public Difficulty { get; set; }
使用
enum
关键字指定枚举后,该枚举将充当一个类型,就像class
或struct
一样
以下是如何使用自定义枚举实现属性:
public enum _Difficulty { Easy, Normal, Hard };
public _Difficulty Difficulty { get; set; }
这里有一些问题:
enum
是私有的,因此无法调用setDemobility
为其提供该enum
中的值。事实上,编译器不允许这样做setDemobility
的参数只是一个类型,它还需要一个变量名。还有一个编译器错误public enum Difficulty { Easy, Normal, Hard }
public Difficulty DifficultySetting { get; set; }
请注意,我必须将属性的名称更改为
DifficultySetting
,因为它与枚举名称冲突。你的使用了下划线,这也解决了这个问题。然而,我总是发现下划线是针对私有成员的,如果您希望使用代码的用户使用此enum
,则它必须是公共的。用下划线之类的东西装饰公共成员会分散对名称本身语义的注意力。无论如何,语义取决于您的个人偏好,因此您可以根据自己的喜好修改这些名称。您的代码尝试分配难度
值,而实际上难度
是枚举
类型的名称。我鼓励使用getter和setter作为属性:
public enum Difficulty { Easy, Normal, Hard };
private Difficulty _difficulty;
public Difficulty CurrentDifficulty
{
get { return _difficulty; }
set { _difficulty = value; }
}
通过这种方式,您可以在setter中为特殊条件添加额外的代码。要使用它,只需执行以下操作:
//set
CurrentDifficulty = Difficulty.Easy;
//get
Difficulty theDifficulty = CurrentDifficulty;
这里似乎存在着对基本C#概念的根本性误解,我不确定有什么答案可以解决。你的出发点是什么?枚举不是变量,而是一种类型。你不能用它来存储在运行时更改的信息。Jon,我喜欢公共属性的第一个变体,但是我在命名它时遇到了麻烦。你能为这类东西推荐一个好的命名惯例吗?@Louiseegleton:我不太清楚你的意思。命名变异?命名财产?命名包含属性的类?如果包含类的唯一目的是设置枚举,则命名包含属性的类。如果我想为枚举设置构造函数,当然枚举不能设置构造函数,所以我将它们包含在一个类中,那么我就使用这种模式。在这种情况下调用类“困难设置器”或类似的方法似乎很蹩脚。@Louiseegleton:老实说,这感觉像是一个有点奇怪的类。这里的上下文是“一个存储设置的类”,表明它不仅仅是这一个属性。我想我需要更多地了解真实情况的背景,才能对名字提出建议。
//set
CurrentDifficulty = Difficulty.Easy;
//get
Difficulty theDifficulty = CurrentDifficulty;