成员定义了多次错误消息?

时间:2011-05-26 05:39:29

标签: c# visual-studio

我在vs2010中使用c#,并且学习oop;我第一次尝试在appCode文件夹中声明对象提交时不断给出错误消息

this member defined more than once
ambiguity between Submission.SubmissionId and Submission.SubmissionId

此错误抛出每个变量(CustId,BroId,Coverage)。我按照我在语法教程中找到的模型;这是问题吗?代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

public class Submission 
    {
        int SubmissionId;
        int CustId;
        int BroId;
        int Coverage;
        //Array Product[] products;

        public Submission() {}
        public int SubmissionId 
        {
            get { return SubmissionId; }
            set { SubmissionId = value; }
        }
        public int CustId
        {
            get { return CustId; }
            set { CustId = value; }
        }
        public int BroId
        {
            get { return BroId; }
            set { BroId = value; }
        }
        public int Coverage
        {
            get { return Coverage; }
            set { Coverage = value; }
        }
    } 

7 个答案:

答案 0 :(得分:5)

问题是你给变量和属性赋予了相同的名称。

你可以通过给他们不同的名字来修复它:

public class Submission 
{

    public Submission() {}

    private int submissionId;
    public int SubmissionId 
    { 
        get{ return this.submissionId; }
        set{ this.submissionId = value; }
    }

    private int custId ;
    public int CustId
    { 
        get{ return this.custId ; }
        set{ this.custId = value; }
    }

    private int broId ;
    public int BroId
    { 
        get{ return this.broId ; }
        set{ this.broId = value; }
    }

    private int coverage;
    public int Coverage
    { 
        get{ return this.coverage; }
        set{ this.coverage= value; }
    }


} 

阅读How to best name fields and properties


此外,您可以使用Auto-Implemented Properties

  

在C#3.0及更高版本中,自动实现   属性使属性声明   没有额外逻辑时更简洁   属性访问者需要。   它们还使客户端代码能够创建   对象。

我们走了:

public class Submission 
{

    public Submission() {}

    public int SubmissionId { get; set; }

    public int CustId { get; set; }

    public int BroId { get; set; }

    public int Coverage { get; set; }

} 

答案 1 :(得分:3)

要么声明你的属性:

private int _submissionId;
public int SubmissionId 
{
    get { return _submissionId; }
    set { _submissionId = value; }
}

或者您可以使用Auto-Implemented properties(C#3.0或更高版本,它们执行相同的操作但需要更少的输入)

public int SubmissionId { get; set; }

答案 2 :(得分:3)

您为公共和私人会员提供相同的名称。你做不到。
您可以决定为所有私有成员提供前缀,例如下划线(_),作为suggested here

另外,如果你没有在你的房产中做任何特别的事,那么@Akram Shahda的答案是一个很好的建议

答案 3 :(得分:1)

您的私人和公共会员名称相同。

将您的私人成员名称更改为

 int _submissionId;
 int _custId;
 int _broId;
 int _coverage; 

如果您使用的是visual studio 2008或之后的旅行>

 public int SubmissionId { get; set; }
  public int CustId { get; set; }
  public int BroId { get; set; }
  public int Coverage { get; set; } 

答案 4 :(得分:1)

您使用相同的名称命名了字段和属性,从而导致错误。 您可以将字段重命名为submissionId。 顺便说一下,在这种情况下根本不需要定义一个字段。使用此属性语法:

public int SubmissionId { get; set; }

答案 5 :(得分:1)

在这种情况下,您有一个字段和一个具有相同名称的属性,这是不允许的。

标准后备存储实现看起来像这样。

private int _CustID;
public int CustId
{
     get { return _CustID; }
     set { _CustID= value; }
}

如果您只是使用没有get或set逻辑的Properties,请利用自动属性。

public int CustID {get;set;}

答案 6 :(得分:0)

雅,你在代码中的任何方式都已经宣告了SubmissionId,CustId,BroId,Coverage的两次权利。为什么会这样?你可以直接在下面申报一个房产。删除第一个声明。