当前上下文中不存在属性

Doe*_*wns 0 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
            {
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在另一个文件中

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

        this.Marque = "Audi";
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Mon*_*Zhu 7

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

2)Marque是类型int,你不能指定string

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

解决方案:

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

2)改变任一的类型Marquestring您分配给它一个或值int

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

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

    set
    {
        marque = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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