2013-04-04 72 views
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(); 
    } 
} 
+0

我认为[property](http://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx)是一种更好的方法 – 2013-04-04 14:26:01

+0

这是一个非常常见的问题。这个主题有很多在线资源。 – Servy 2013-04-04 14:43:18

+0

@Servy我不认为它是重复的;另一个问题是关于属性与领域;这个问题是关于字段与方法。但是,我同意搜索这个问题的答案很容易。 – feralin 2013-04-04 16:16:17

回答

2

使用场参考getter方法之间的区别是,如果你创建一个您期望“客户端代码”使用的方法,然后您可以随时更改方法代码并且客户端不必更改其代码即可。如果您使用字段,那么如果您决定要在该方法中进行验证,则客户端必须将使用该字段的代码更新为使用方法。因此,总之,最好使用吸气剂方法未来验证。然而,如C#语言,你也可以使用性能,这行为等的方法样子领域,所以你可以有两全其美的:漂亮的语法(场),以及面向未来的(方法)。

1

直接访问到一个类中的一个变量外面是不是一个很好的做法,因此,强烈建议使用methods(还包括properties)。 当没有对类变量的直接访问时,其他类可以使用它,并且每当更改类的内部结构时,都可以用较少的努力来完成。考虑一下类:

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所以干脆去做了,你可以更改数量,改变你的财产这样

class someclass 
{ 
    private int? number; 

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

    //or you can use method 
} 
+0

请解释为什么这是不好的做法,如果你可以:)。 – 2013-04-04 14:25:00

1

该类型的数据,你最好使用一个属性:

class someclass 
{ 
    private int number; 

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

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

0

揭露领域是不好的做法,因为它那么广泛比暴露方法或财产。例如,您想要根据其他字段值更改此字段的计算逻辑。这两种方法都是可行的,但如果你使用方法或属性,实现起来会更容易和更清晰。