使用空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集的意义是什么

它封装了编译器生成的字段,并为类或结构开发人员提供了稍后在内部更新字段的能力,而无需通过修改您关心的get/set部分来破坏代码。

例如,突然不想返回null。您可以通过简单地更改空的get来实现这一点。当然,这意味着你突然需要手动控制变量,但这只是灵活性的一个小代价。

不要忘记继承:属性是可继承的,而字段不是。您可以使用继承类中的字段,但不能通过使它们成为虚拟字段来改变它们的行为。

getset是访问器,意味着它们能够访问私有字段中的数据。一般来自数据库。这是将数据成员公开为公共成员的快捷方式,这样您就不需要显式创建专用数据成员。C#将为您创建一个私有数据成员。

以下示例是getset的详细形式。

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; }
}

现在,所有这些都归结为编译器为您提供了支持字段。这只是语法上的糖,通过写更少的代码让你的生活更轻松。