vector3
类定义如下。
public struct Vector3
{
public double X { get; set; }
public double Y { get; set; }
public double Z { get; set; }
}
代码工作正常。但是,当我可以在不使用它的情况下获取和设置变量时,使用{ get; set; }
的重要性是什么?
public struct Vector3
{
public double X;
public double Y;
public double Z;
}
答案 0 :(得分:1)
它封装了编译器生成的字段,并为您提供了类或结构开发人员在以后内部更新它的能力,而不会通过简单地修改您关心的get / set部分来破坏您的代码。
例如,突然之间永远不想返回null你可以通过简单地改变空的get来做到这一点。当然,这意味着您突然需要手动控制变量,但这需要付出很小的代价才能获得灵活性。
不要忘记继承:属性是可继承的,而字段则不是。您可以在继承的类中使用字段,但不能通过将它们设置为虚拟来改变它们的行为。
答案 1 :(得分:1)
get
和set
是访问者,意味着他们能够访问私有字段中的数据。一般来自数据库。
这是将数据成员公开为公共的快捷方式,因此您无需显式创建私有数据成员。 C#将为您创建一个私有数据成员。
以下示例是get
和set
的详细形式。
private string X;
public string X
{
get
{
return this.X;
}
set
{
this.X= value;
}
}
答案 2 :(得分:1)
如果你的Vector3
结构要实现一个接口,你需要像这样指定它:
public struct Vector3 : IVector
{
public double X { get; set; }
public double Y { get; set; }
public double Z { get; set; }
}
public interface IVector
{
double X { get; set; }
double Y { get; set; }
double Z { get; set; }
}
您无法为字段创建界面。这是非法的:
public interface IVector
{
double X;
double Y;
double Z;
}
现在,你可以比这更进一步。我们假设您想在课堂上使用一个很好的只读界面,您可以这样做:
public struct ReadOnlyVector3 : IReadOnlyVector
{
public double X { get; private set; }
public double Y { get; private set; }
public double Z { get; private set; }
}
public interface IReadOnlyVector
{
double X { get; }
double Y { get; }
double Z { get; }
}
现在,所有这些都归结为编译器为您提供支持字段。通过编写更少的代码,让你的生活更轻松,这只是语法上的糖。