使用空get集的意义是什么
本文关键字:是什么 get | 更新日期: 2023-09-27 18:01:30
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;
}
它封装了编译器生成的字段,并为类或结构开发人员提供了稍后在内部更新字段的能力,而无需通过修改您关心的get/set部分来破坏代码。
例如,突然不想返回null。您可以通过简单地更改空的get来实现这一点。当然,这意味着你突然需要手动控制变量,但这只是灵活性的一个小代价。
不要忘记继承:属性是可继承的,而字段不是。您可以使用继承类中的字段,但不能通过使它们成为虚拟字段来改变它们的行为。
get
和set
是访问器,意味着它们能够访问私有字段中的数据。一般来自数据库。这是将数据成员公开为公共成员的快捷方式,这样您就不需要显式创建专用数据成员。C#将为您创建一个私有数据成员。
以下示例是get
和set
的详细形式。
private string X;
public string X
{
get
{
return this.X;
}
set
{
this.X= value;
}
}
如果你的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; }
}
现在,所有这些都归结为编译器为您提供了支持字段。这只是语法上的糖,通过写更少的代码让你的生活更轻松。