使用空get set有什么意义?

时间:2015-07-07 04:25:21

标签: c#

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

3 个答案:

答案 0 :(得分:1)

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

例如,突然之间永远不想返回null你可以通过简单地改变空的get来做到这一点。当然,这意味着您突然需要手动控制变量,但这需要付出很小的代价才能获得灵活性。

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

答案 1 :(得分:1)

getset是访问者,意味着他们能够访问私有字段中的数据。一般来自数据库。 这是将数据成员公开为公共的快捷方式,因此您无需显式创建私有数据成员。 C#将为您创建一个私有数据成员。

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

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

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