繁体   English   中英

成员定义了不止一次的错误信息?

[英]Member defined more than once error message?

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

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

每个变量(CustId、BroId、Coverage)都会引发此错误。 我遵循了在语法教程中找到的 model; 那是问题吗? 下面的代码:

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; }
        }
    } 

问题是您为变量和属性提供了相同的名称。

您可以通过给它们不同的名称来修复它:

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; }
    }


} 

阅读如何最好地命名字段和属性


此外,您可以使用自动实现的属性

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

这里我们 go:

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; }

} 

要么像这样声明你的属性:

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

或者您可以使用自动实现的属性(C# 3.0 或更高版本,它们做同样的事情但需要更少的输入)

public int SubmissionId { get; set; }

您正在为您的公共和私人成员提供相同的名称。 你不能那样做。
您可以决定给所有私有成员一个前缀,例如下划线 (_),如此处所建议的

此外,如果您没有在您的房产中做任何特别的事情,@Akram Shahda 的回答是一个很好的建议

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

将您的私人会员姓名更改为

 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; } 

您使用相同的名称命名字段和属性,这会导致错误。 例如,您应该将字段重命名为 submitId。 顺便说一句,在这种情况下根本不需要定义字段。 使用此属性语法:

public int SubmissionId { get; set; }

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

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

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

如果您只是使用没有获取或设置逻辑的属性,请利用自动属性。

public int CustID {get;set;}

是的,无论你如何在代码中声明了 SubmissionId、CustId、BroId、Coverage 两次都是正确的。 为什么会这样? 你可以直接在下面声明一个属性。 删除第一个声明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM