小弟最近对于C#中的语法使用有些疑问希望执教。
例如:小弟定义一个类,但是我不确定什么时候采用属性与外界联系,什么时候使用变量与外界联系。也就是说
public string A{get; set}和public string A在使用上有什么区别吗?
还有什么时候需要用构造函数初始化变量,既然使用属性获取参数,那么为什么还要用构造函数初始化变量?
还有定义具有什么特点的方法时需要为方法增加参数?
谢谢大家!

解决方案 »

  1.   

    盡量使用屬性和外界聯系, 可以參看Effective C#.愚翁已經把這本書翻譯了,在他的博客中,可以去看看。
      

  2.   

    public string A{get; set}和public string A
    -----------------------------
    一般来说,不将属性设为public,这样会破坏类的封装性,要是要设置值的话,用set get能提高程序的健壮性
      

  3.   

    public string A{get; set}和public string A有区别吗?
    这样写当然没区别,但是像这样:
    private string a;
    public string A{
      get{
        if(...条件) return a;
        else return "";
      } 
      set{
        if(value == null)
          this.a = "";
        else
          this.a = value;
      }
    }get与set不单单可以设置或返回值, 而且在设置返回前可以做手脚, 这些动作是隐藏的. 但如果直接用public string a;  别人通过直接访问a数据成员, 那么什么动作都不能做, a是什么值就返回什么值;  这部分是.net比java多做的封装性.不过现在java的设计模式也越来越多使用getter和setter, 比如:
    private string a;
    public getA{ ... }
    public setA{ ... }java的getter,setter 与 C#的属性 public A { get{..}  set{..} } 比较起来, 不论在程序清晰可读和使用上, 都差远了.
      

  4.   

    public string a ;这样的方式好比你自家的东西,放开来给别人用。我想你不敢。
    public string a{get;set;}就是你给别人一个方法来用你自家的东西,借与不借你可以控制。
      

  5.   

    dyw31415926(dyw31415926)
    public string A{get; set}和public string A
    -----------------------------
    一般来说,不将属性设为public,这样会破坏类的封装性,要是要设置值的话,用set get能提高程序的健壮性
    ===============================
    通过property进行读取可以提高对象的封装性和安全性,还有一个重要的问题是:假如你的读取逻辑发生变化时,对外的接口(property)不需要发生变化