[技術類 – C# 學習誌 – C#面試考題 ] 物件、類別、方法多載、 static 靜態方法

• 類別主要的功能是用來描述定義物件的模樣
• 類別主要包含下列成員
– 欄位(field)
– 屬性(property)
– 方法(method)
– 事件(event)
——————————————————————————————————
一個程式檔案裏面只能有一個main
namespace 底下可以有 namespace
class 底下可以有 class
——————————————————————————————————
class 分為 :   instance and static

使用 instance member 需要實體化, 跟著物件存在一起, 有幾個物件就有幾個
使用 static member 不需要實體化, 它自始就存在 (只能有一份,就像 main 一樣, 一個程式檔案裏面只能有一個main )(用 class name 呼叫即可)

• 類別中的靜態成員不需要產生實體物件即可直接存取引用
• 靜態成員必須使用static 關鍵字進行宣告
• 引用靜態成員方式,直接使用類別名稱再利用"." 連接靜態成員名稱即可
• Main 就是一個靜態方法成員

——————————————————————————————————
• 欄位為類別中所定義的各種資料型別變數
• public– 任何外部類別都可不受限制存取此類別成員
• private– 此類別成員只能在此類別中使用
• protected– 此類別成員可在此類別及繼承此類別的子類別使用
• internal– 在同一個組件中都可存取此類別成員
• protected internal– 提供protected 及internal 二種存取方式

• 屬性用來存取類別的欄位值
• 實體物件一樣可透過"." 來存取屬性資料
• 語法:

存取修飾詞 資料型別 屬性名稱
{
get
{
return 欄位名稱;
}
set
{
欄位名稱= value;
}
}

注意: 我們可以只設定get 部份讓該屬性成唯讀屬性 (只能取得)

——————————————————————————————————

• 方法多載允許我們將傳入參數不同的方法,定義成相同的名稱
• 當我們在定義二數相加的方法時,藉由方法多載可讓我們不需定義二個不同名稱的方法,以區隔為二個整數相加或二個浮點數相加

——————————————————————————————————
以下程式, 可貼入 visual studio 進行練習與測試, 包含今天上面所說的概念 (物件、類別、方法多載、 static 靜態方法):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
    class Caculator
    {
        //方法多載 – C# 允許有同名的方法, 但是傳入值必須不同
        public int add(int x, int y)
        {
            return x + y;
        }
        public int add(int x, int y,int z)
        {
            return x + y + z;
        }
    }
    class math
    {
        //方法多載 – C# 允許有同名的方法, 但是傳入值必須不同
        public static int max(int x, int y)
        {
            return Math.Max(x, y);
        }
        public static int max(int x, int y, int z)
        {
            int[] array1 = { x,y,z };
            int max = array1.Max();
            return max;
        }
    }
    public class console
    {
        static public string query(string a)
        {
            Console.WriteLine(a);
            return Console.ReadLine(); //以使用者輸入的為答案並傳回
        }
    }
    class Program
    {
        static void Main(string[] args)   //Main 即為一個 static 靜態方法
        {
            Car a = new Car();  //產生實體  //a 牽連著一個物件
            a.id = Console.ReadLine();
            Console.WriteLine(a.id);
            a.acclerate(30,"haha",2.0); //加速 – 需傳入三個值
            Car b = new Car();  //產生實體  //b 牽連著一個物件
            b.speed = int.Parse(Console.ReadLine());
            Console.WriteLine(b.speed);
            empolyee c = new empolyee();  //產生實體
            Console.WriteLine(“請輸入底薪");
            c.baseSalary = int.Parse(Console.ReadLine());
            Console.WriteLine(“請輸入獎金");
            c.benefit = int.Parse(Console.ReadLine());
            Console.WriteLine(“每月薪水為:");
            Console.WriteLine(c.salary);
            Console.ReadLine();
            Caculator d = new Caculator();  //產生實體
            d.add(3,4);
            int age = int.Parse(console.query(“你幾歲?"));
            int max_value = math.max(15, 255, 31);  //math.max 傳回最大數
            Console.WriteLine(max_value);
            Console.ReadLine();
            //new Car()
            //1.產生一個物件 (在記憶體中實體化)
            //2.一個class(藍圖),可以產生很多個物件(實體)
            //Car[] c = new Car[10];
            //a.color
            //b.id
            //c.acclerate
        }
    }
    /*
     * 類別功能練習:
     * 建立empolyee 類別
     * 類別中含有baseSalary、salary 及benefit屬性
     * baseSalary 屬性必須大於等於0
     * salary 為唯讀屬性,其值為baseSalary 加上benefit
     * 程式功能:
     * 主程式中請使用者輸入底薪及獎金值
     * 列印出類別salary 屬性值
     */
    public class empolyee
    {
        //類別中含有baseSalary、salary 及benefit屬性
        public int baseSalaryField;
        public int benefitField;
        public int baseSalary
        {
            get
            {
                return baseSalaryField;
            }
            set
            {
                if (value > 0)
                    baseSalaryField = value;
            }
        }
        public int benefit
        {
            get
            {
                return benefitField;
            }
            set
            {
                if (value > 0)
                    benefitField = value;
            }
        }
        public int salary  //唯讀:只有get,沒有set(不能存)
        {
            get
            {
                return baseSalaryField + benefitField;
            }
        }
    }
    public class Car
    {
       /*性質:  1. Field
        *       2. Property
        *       Ex: color,id;
        *
        */
        private int num;  //預設是protected
        private string idField; //idField 不對外,為private
        public string id
        {
            get
            {
                return idField;
            }
            set
            {
                idField = value;
            }
        }
        private int speedField;
        public int speed
        {
            get
            {
                return speedField;
            }
            set
            {
                if (value < 0)
                    speedField = 0;
                else if (value > 100)
                    speedField = 100;
                else
                    speedField = 100;
            }
        }
        /*能力:
        *       3. Method
        *       Ex: acclerate;
        */
        public int acclerate(int inc,string b,double c)  //加速 //傳入值為: int inc, 可以傳入多個值,每個都需要傳入
        {
            speedField += inc;
            return speedField;
        }
        /*被動:
        *       4. Event
        *       Ex: accident;
        *
        *
        */
    }
}

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s