Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么可以';我更改子类中的字段,除非它在方法C中#_C#_Field - Fatal编程技术网

C# 为什么可以';我更改子类中的字段,除非它在方法C中#

C# 为什么可以';我更改子类中的字段,除非它在方法C中#,c#,field,C#,Field,嗨,这可能是一个非常基本的答案,但我在谷歌上找不到它 基本上,我了解继承工作原理的基础知识,但是我无法理解我在练习继承时使用的一个小示例代码,我只能在子类的父类中更改int集的值,当它位于具有shapeSize的方法中时,例如: public class Shape { public int shapeSize = 1; public virtual void Draw() { Console.WriteLine("Draw a shape");

嗨,这可能是一个非常基本的答案,但我在谷歌上找不到它

基本上,我了解继承工作原理的基础知识,但是我无法理解我在练习继承时使用的一个小示例代码,我只能在子类的父类中更改int集的值,当它位于具有shapeSize的方法中时,例如:

    public class Shape
{
   public int shapeSize = 1;
    public virtual void Draw()
    {
        Console.WriteLine("Draw a shape");
        ShowShapeSize();
    }

    private void ShowShapeSize()
    {
        Console.WriteLine(shapeSize);

    }
}

public class Circle : Shape
{
       //Can't change value here of shapeSize here??
    public override void Draw()
    {
        shapeSize = 2;
        base.Draw();
        Console.WriteLine("Testing none override");
    }

}

有人能解释为什么我不能在我放置评论的区域中更改字段,但为什么我可以在方法中更改字段

你不能把代码放在一个方法之外。我想用字段可以改变子类本身的字段?我想答案一定不是这样的。这是为什么?因为你只能把代码放在一个方法里面。你可以创建一个可重写的属性(在子类中重写它),但字段只是内存;要更改它们,您需要运行代码,要运行代码,您需要像方法一样的执行上下文。属性不仅仅是内存,它们是一对函数(getter和setter)。为什么会这样?嗯,因为这就是语言的设计方式。好吧,我明白了,我现在很困惑,因为我认为如果它继承了相同的字段,我可以在相同的位置更改它们,但是现在你说的关于getter和setter是有意义的。正如我在其他上下文中所理解的,代码需要在方法中调用。谢谢