C#如何在类中使用get,set和use enums

时间:2014-03-11 19:46:47

标签: c# class enums int boolean

我有一个程序,我使用类存储设置。我需要它来使用set和get函数来更改和存储设置。我试过这个,但是我没有让它发挥作用。任何人都可以帮我这个吗?

    private enum _Difficulty { Easy, Normal, Hard };

    public void SetDifficulty(Difficulty)
    {
        _Difficulty = Difficulty;
    }

    public enum GetDifficulty()
    {
        return _Difficulty;
    }

enumsget的课程中无法使用set吗?

我还需要boolint

7 个答案:

答案 0 :(得分:33)

这里有几个问题:

  • 你的枚举是私密的,但你的方法是公开的。因此,您不能使您的方法返回类型为枚举类型,或具有该类型的参数
  • 您的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;
    }
}

答案 1 :(得分:2)

您的代码尝试为Difficulty分配值,而实际上Difficultyenum类型的名称。我鼓励使用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;

答案 2 :(得分:1)

您想要使用的枚举需要公开。您还需要该枚举的实例来存储您正在设置的值,您当前正在将其设置为枚举声明。然后,您希望为类存储的内容和传入的内容使用相同的枚举类型。

public enum Difficulty { Easy, Normal, Hard };

public Difficulty { get; set; }

答案 3 :(得分:1)

使用enum关键字指定枚举后,该枚举将作为一种类型,如classstruct

以下是您如何使用自定义枚举实现属性:

public enum _Difficulty { Easy, Normal, Hard };
public _Difficulty Difficulty { get; set; }

答案 4 :(得分:0)

我不确定你是否正确使用它们。这可能会有所帮助......

private enum Difficulty { Easy, Normal, Hard };
private Diffuculty theDifficulty;

public void SetDifficulty(difficulty d)
{
    theDifficulty = difficulty;
}

public Difficulty GetDifficulty()
{
    return theDifficulty;
}

答案 5 :(得分:0)

枚举是类型而不是变量。像这样的东西会起作用:

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

答案 6 :(得分:0)

这里有很多问题:

  1. 您的enum是私密的,因此我们无法致电SetDifficulty向其提供enum的值。实际上,编译器不会允许这样做。
  2. SetDifficulty的参数只是一个类型,它还需要一个变量名。也是编译器错误。
  3. 您试图获取/设置枚举本身的值,而不是枚举类型的类级变量。这也不会编译。
  4. 你想要这样做

    public enum Difficulty { Easy, Normal, Hard }
    
    public Difficulty DifficultySetting { get; set; }
    

    请注意,我必须将属性的名称更改为DifficultySetting,因为它与枚举名称冲突。你使用了下划线,这也可以解决这个问题。但是我总是发现下划线是针对私人成员的,如果你想使用代码来使用这个enum那么它就需要公开。使用诸如下划线之类的东西来装饰公共成员会分散名称本身的语义。在任何情况下,语义都取决于您的个人偏好,因此您可以根据需要修改这些名称。