Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#如何在类中使用get、set和use enum_C#_Class_Enums_Int_Boolean - Fatal编程技术网

C#如何在类中使用get、set和use enum

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() {

我有一个使用类存储设置的程序。我需要它来使用set和get函数来更改和存储设置。我已经试过了,但没有成功。有人能帮我做这个吗

    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;