C#如何在类中使用get,set和use enums
我有一个程序,我使用类存储设置。 我需要它来使用set和get函数来更改和存储设置。 我试过这个,但我没有让它发挥作用。 任何人都可以帮我这个吗?
private enum _Difficulty { Easy, Normal, Hard }; public void SetDifficulty(Difficulty) { _Difficulty = Difficulty; } public enum GetDifficulty() { return _Difficulty; }
有没有办法在get
和set
的类中使用enums
?
我还需要bool
和int
。
这里有几个问题:
- 你的枚举是私人的,但你的方法是公开的。 因此,您不能使您的方法返回类型为枚举类型,或具有该类型的参数
- 你的
SetDifficulty
方法只有一个Difficulty
参数 – 是指参数名称还是类型? - 您的
SetDifficulty
方法正在尝试设置类型而不是字段 - 你的
GetDifficulty
方法试图使用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方法:
public enum Difficulty { Easy, Normal, Hard } public class Foo { private Difficulty difficulty; public void SetDifficulty(Difficulty value) { difficulty = value; } public Difficulty GetDifficulty() { return difficulty; } }
您想要使用的枚举需要公开。 您还需要该枚举的实例来存储您正在设置的值,您当前将其设置为您的枚举声明。 然后,您希望为类存储的内容和传入的内容使用相同的枚举类型。
public enum Difficulty { Easy, Normal, Hard }; public Difficulty { get; set; }
一旦使用enum
关键字指定枚举,该枚举将充当类型,就像class
或struct
一样。
以下是使用自定义枚举实现属性的方法:
public enum _Difficulty { Easy, Normal, Hard }; public _Difficulty Difficulty { get; set; }
您编写代码尝试为一个值赋值,实际上, Difficulty
是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;
我不确定你是否正确使用它们。 这可能有帮助……
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;}
请注意,如果您希望从公共方法访问它,则必须将该枚举公开。
这里有很多问题:
- 你的
enum
是私有的,所以没有什么能够调用SetDifficulty
为它提供来自该enum
的值。 实际上,编译器不允许这样做。 -
SetDifficulty
的参数只是一个类型,它还需要一个变量名。 也是编译器错误。 - 您试图获取/设置枚举本身的值,而不是枚举类型的类级变量。 这也不会编译。
看起来你想要这样做:
public enum Difficulty { Easy, Normal, Hard } public Difficulty DifficultySetting { get; set; }
请注意,我必须将属性的名称更改为DifficultySetting
因为它与枚举名称冲突。 你使用了下划线,这也可以解决这个问题。 但是我总是发现下划线是针对私有成员的,如果你想使用这个enum
消耗代码,那么它需要公开。 使用下划线等东西来装饰公共成员会分散名称本身的语义。 在任何情况下,语义都取决于您的个人偏好,因此您可以根据需要修改这些名称。