与子类型名称同名的属性

时间:2014-04-29 09:10:52

标签: c# syntax

是否可以声明与类子类型名称相同的属性?像这样:

class WorkerResult 
{
    public enum Status
    {
         Okay,
         Wrong,
         SomethingElse
    };

    public Status Status {get;set;}
    public object Data {get;set;}
}

这导致以下错误:

The type 'WorkerResult' already contains a definition for 'Status' File.cs

3 个答案:

答案 0 :(得分:4)

您不能拥有与该属性同名的子类型,您将收到冲突。您可以尝试在外面声明它。

public enum Status
{
     Okay,
     Wrong,
     SomethingElse
};

class WorkerResult 
{
    public Status Status {get;set;}
    public object Data {get;set;}
}

修改 正如@Ashigore评论的那样,你应该通过重命名来达到清晰度。拥有属性和枚举会增加混乱。或者最糟糕的情况是,如果你不想重命名它,可以考虑在同一个文件中使用枚举来显示更强的关联,而不是在类中使用它。

答案 1 :(得分:1)

  

是否可以声明与类名称相同的属性   子类名称?

不,这是一个基本的命名冲突 - 您的名称范围相同。想想你班级的代码客户端,Status将提供给他?

var worker = new WorkerResult();
var status = worker.Status; //Which one will be supplied??

声明class ,而不是其中的成员:

public enum Status
{
     Okay,
     Wrong,
     SomethingElse
};

class WorkerResult 
{
    public Status Status {get;set;}
    public object Data {get;set;}
}

答案 2 :(得分:1)

不错的问题和棘手我会做那样的事情:

public class WorkerResult
{
  public static class Consts
  {
    public enum Status
    {
      Okay,
      Wrong,
      SomethingElse
    };
  }

  public Consts.Status Status { get; set; }
  public object Data { get; set; }
}