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