当前上下文中不存在属性

时间:2017-07-21 07:36:19

标签: c# properties

我收到以下错误:

  

"属性在当前上下文中不存在"。

我检查了StackOverflow的常见原因,但我没有提出任何错误。 (至少没有一个我理解^^)。我正在使用Microsoft Visual Studio 2015

这是我的代码:

namespace ConsoleApplication5
{
    public class Voiture
    {
        public int Vitesse { get; set; }
        public Voiture()
        {
            Vitesse = 5;
        }
        public string Marque
        {
            get
            {
                throw new System.NotImplementedException();
            }

            set
            {
            }
        }
    }
}

并在另一个文件中

namespace ConsoleApplication5
{
    public class Audi : Voiture
    {
        public void Deraper()
        {
            Console.WriteLine("Vroooouum !!");
        }

        this.Marque = "Audi";
    }
}

如果我使用this.Marque代替Voiture.Marque,我会遇到同样的问题。 如您所见,命名空间是可以的。知道发生了什么事吗?

4 个答案:

答案 0 :(得分:7)

1)不允许您访问和初始化方法体外的继承属性。您只能在那里声明新的属性或字段。

2)Marque类型为int,您无法为其分配string

3)你的Marque的setter是空的,所以这没有效果

解决方案:

1)将this.Marque的访问权移动到构造函数或方法体中!

2)将Marque的类型更改为string或将您指定给它的值更改为int

3)添加一个额外的私有字段,并按以下方式重写setter(和getter):

private int marque;
public int Marque
{
    get
    {
        return marque;
    }

    set
    {
        marque = value;
    }
}

有关如何使用属性的更多信息,您可以查看以下链接:

https://www.dotnetperls.com/property

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/using-properties

编辑:

  

如果我使用this.Marque代替Voiture.Marque,我会遇到同样的问题。

这是因为第一个问题仍然有效。如果你在方法体内执行此操作,则会遇到其他问题!由于Marque不是static,因此您无法通过使用类名调用它来使用它。您需要一个类型为Voiture

的对象的实例

答案 1 :(得分:2)

您的代码存在两个问题。

  1. Marque是int,您正试图设置string
  2. 您无法在方法或构造函数外部访问该属性。
  3. 使用此代码,您将了解问题1

    public Audi()
    {
        this.Marque = "Audi";
    }
    

答案 2 :(得分:2)

问题是你缺乏对OOP的基本理解。您正在尝试从类范围分配基类属性,这不是它在OOP中的工作方式。你必须创建一些" callable"范围,例如。构造函数,并在该范围内分配您父项的字段/属性:

public class Audi : Voiture {
// Draper() ...

    public Audi() : base() {
        Marque = "Audi";
    }
}

更具描述性的答案:
类范围内的所有内容都称为定义,其中的每个其他范围都称为实现。既然您已经在父类中定义了(定义了)该字段/属性,那么您必须在一个实现中分配它,在该实现中,该字段/属性的访问修饰符允许您或者在同一时刻使用#39 ;重新定义此字段/属性。

答案 3 :(得分:2)

在C#中,您无法在类体中初始化属性。您应该在构造函数中初始化它们:

namespace ConsoleApplication5
{
    public class Audi : Voiture
    {
        Audi() {
            this.Marque = "Audi";
        }

        public void Deraper()
        {
            Console.WriteLine("Vroooouum !!");
        }
    }
}