1

我应该更喜欢直接从其他类获取变量(int number = something.number;)还是应该使用函数来获取该数字(如下例所示)?有什么不同?

class someclass
{
    private int number;
    public float GetSomething()
    {
        return number;
    }
}
class otherclass
{
    someclass something;
    private void somefunction()
    {
        int number = something.GetSomething();
    }
}
4

4 回答 4

2

使用字段引用getter 方法的区别在于,如果您创建了一个您希望“客户端代码”使用的方法,那么您以后可以随时更改方法代码,而客户端不必更改他的代码。如果您使用field,则客户端必须将其代码从使用该字段更新为使用方法,如果您决定要在方法中进行验证。因此,简而言之,使用getter 方法进行未来验证是更好的做法。但是,在像 C# 这样的语言中,您也可以使用属性,它们的作用类似于方法,但看起来像字段,因此您可以两全其美:良好的语法(字段)和面向未来的(方法)。

于 2013-04-04T14:25:24.153 回答
1

直接访问类之外的类变量不是一个好习惯,因此强烈建议使用方法(也包括属性)。当无法直接访问您的类变量时,其他类可以使用它,并且每当您更改类的内部结构时,您都可以轻松完成。考虑你的班级:

class someclass
{
    // it's a field
    private int number;

    // it's a property
    public int Number
    {
        get{return this.number;}
    }

    //or you can use method
}

编辑:如果一段时间后您发现最好将number' 的类型更改为int?,您可以这样做,因为从来没有在课堂之外使用任何人number,所以您可以简单地更改 number 并以这种方式更改您的属性

class someclass
{
    private int? number;

    public int Number
    {
        get{return this.number.Value;}
    }

    //or you can use method
}
于 2013-04-04T14:24:29.143 回答
1

对于那种类型的数据,你最好使用一个属性:

class someclass
{
    private int number;

    public int Number 
    {
        get {return number;}
        set {number = value;}
    }
}

那么你可以在其他任何地方使用 someclass.Number

于 2013-04-04T14:26:47.967 回答
0

公开字段是不好的做法,因为它没有公开方法或属性那么广泛。例如,您想根据其他字段值更改此字段的计算逻辑。这两种方法都可以实现,但如果您使用方法或属性,实现起来会更容易、更清晰。

于 2013-04-04T14:31:13.543 回答