2014年1月26日 星期日

物件導向

1.設定命名空間 Namespace

  • 將類別包裹在AjaxSoft.HR命名空間裡
範例:
    
namespace AjaxSoft.HR
{
    public class Person
    {
        public Person()
        {
            //
            // TODO: 在這裡新增建構函式邏輯
            //
        }
    }
}

2.設定命名空間 public,private

  • public-共用成員,無論是類別或類別外的程式碼都可存取選告為public的類別成員
  • private-只有在成員宣告的範圍內的程式碼才能存取
範例:

    
    public class Person
    {
        public string Name;
        private DateTime _birthday;
    }

筆者public宣告習慣將字頭大寫Name,private習慣加入底線_birthday

3.方法

    
[修飾元] 回傳值型別    方法名稱  (引數列)

{

              //程式敘述句

}
  • 無回傳值的方法
    • 有些方法並不會回傳資料,此時可以將回傳值宣告為void,不需要使用return保留字
範例:

    
    public class Person
    {
        public string Name;
        private DateTime _birthday;
        public void CheckName()
        {
            if(string.IsNullOrEmpty(Name))
            {
                Name = "尚未設定名字";
            }
        }
    }

  • 回傳值方法
    • C#應用程式使用return保留字,將運算的結果傳回到原呼叫的程式之中,return敘述所回傳的資料,必須和宣告方法時回傳值的資料型別相同
範例:

    
    public class Person
    {
        public string Name;
        private DateTime _birthday;
        public void CheckName()
        {
            if(string.IsNullOrEmpty(Name))
            {
                Name = "尚未設定名字";
            }
        }
        public string WhoAreU()
        {
            return "我是 :" + Name;
        }
    }

  • 若方法回傳值不是void,則方法至少有一個return敘述
  • 方法執行到return敘述就結束了,因此,return敘述後面的程式將不會執行到

  • 引數

    
[修飾元] 回傳值型別    方法名稱  (引數1,引數2,引數3......)

{

              //程式敘述句

}

範例:
    
    public class Person
    {
        public string Name;
        public void CheckName(string defaultName)
        {
            if(string.IsNullOrEmpty(Name))
            {
                Name = defaultName;
            }
        }
    }

4.屬性

    
[存取修飾詞] 資料型別    屬性名稱

{

              get{................}

              set{................}

}

範例:


    
        public DateTime BirthDay
        {
            get
            {
                //屬性被讀取或參考到時執行的程式
                return _birthday;
            }

            set
            {
                //屬性被寫入或設定到時執行的程式
                if(value < DateTime.Now)
                {
                    _birthday = value;
                }
            }
        }

唯讀及唯寫屬性

唯讀屬性只有設定get
唯寫屬性只有設定set
範例:

    
        public int Age
        {
            get
            {
                return DateTime.Now.Year - BirthDay.Year + 1;
            }
        }
因 Age 只有設定get,故Age 就是唯讀屬性

5.自動實作屬性

例如:Person.cs類別中的Name變數成員,當把Name這個變數成員要利用屬性,包裝起來讓外界存取,預設設計為

    
public string namespace;
    public string PersonName
{
    get
    {
        return Name;
    }
    set
    {
        Name = value;
    }
}
可改寫成

    
    public class Person
    {
        public string Name { get; set; }
    }

唯讀及唯寫

在get前面加入private代表"唯寫",在set前面加入private代表"唯讀"

    
    public class Person
    {
        public string Name { get; private set; }
    }

6.建構函式

如果希望在物件建立時,執行一段程式,則可在類別裡面加入建構函式(Constructor)。
建構函式就是用來定義物件實體初始化方式的程式區塊,宣告的語法為

[存取修飾詞] 物件類別名稱 (引數1,引數2.....) {

          //建立建構式

}
宣告建構函式的語法跟宣告方法的很像,但是有兩個不一樣的地方:
  • 建構函式沒有回傳值
  • 建構函式名稱和類別名稱相同
範例:
    
public class Employee
{
 public Employee()
 {
        Name = "ASP.NET";
        _birthday = DateTime.MinValue;
 }
}

  • 3~7行就是為建構式。
  • 5,6行則是當物件備建立時,設定資料成員Name及_birthday的初始值

沒有留言:

張貼留言