1. 程式人生 > >【C#】面對物件和類、構造方法及名稱空間

【C#】面對物件和類、構造方法及名稱空間

一、面向物件

1、什麼是面向物件?

面向物件是一種思想,面向物件是將功能等通過物件來實現,將功能封裝進物件之中,讓物件去實現具體的細節,在面向物件中,將資料作為第一位,而方法或者說是演算法作為其次,這是對資料的一種優化,操作起來更加方便,簡化了過程。

2、為什麼要用面向物件?

無論是在C#還是在VB中,都反覆提及到了面向物件,那麼為什麼要使用面向物件呢?也就是說面向物件有哪些好處呢?

面向物件提高了程式的可複用性,可擴充套件性,和靈活性,通過封裝,繼承和多型把程式的耦合度降低,使程式更加的靈活,容易修改,並且易於複用。

3.類和物件

物件:看得見,摸得到,具體的,特指的

類:  

是模板,確定物件將會擁有的特徵(屬性)和行為(方法)

3.1類和物件的區別

1.類是物件的型別

2.物件是類的例項

3.類不佔記憶體,物件佔記憶體

3.2類的程式碼定義

[訪問修飾符]class 類名 { 成員; ... }

訪問修飾符

程式碼中類的預設訪問修飾符為internal; 

屬性和方法的預設訪問修飾符為public;

訪問修飾符 訪問許可權
private 私有成員,在類的內部才可以訪問
public 公有成員,完全公開,沒有訪問許可權
portected 保護成員,該類的內部和繼承中可以訪問
internal 當前程式集內可以訪問

4.類的例項化

當Person類中欄位的訪問修飾符為public時,例項化程式碼為:

class program
{   
    static void Main(string[]args)
    {
        //例項化Person類
        Person per=new Person();
        per._name="張三";
        per._age=18;//類的成員的訪問
        per._gender='男';
        per.SayHello();
        per.Walk();
        Console.WriteLine(per._name);
        Console.ReadKey();
    }
}

而一般情況下,一個類中欄位用private修飾。若仍按上面方法例項化,程式碼就會報錯。這時我們可以通過在Person類中新增屬性來實現例項化。

5.屬性

1.屬性是為了保護與之相對應的欄位的

2.保證對欄位的讀取和賦值符合要求

3.屬性分為:讀寫,只讀,只寫

4.允許外部訪問的變數一定要宣告為屬性

//Person 類
public class Person
{
    private string _name;
    private char _gender;
    private int _age;

    //定義屬性
    public string Name
    {
        get{return _name;}//讀
        set{_name=value;}//寫
    }
    public char Gender
    {
        get{return _gender;}
        set{_gender=value;}
    }
    public int Age
    {
        get{return _age;}
        set{_age=value;}
    }
    //定義SayHello方法
    public void SayHello()
    {
        Console .WriteLine("hello 大家好");
    }
    public void Walk()
    {
        Console.WriteLine("我走著走");
    }
}
//program 類
class program
{   
    static void Main(string[]args)
    {
        //例項化Person類
        Person per=new Person();
        per.Name="張三";//賦值
        per.Age=18;
        per.Gender='男';
        per.SayHello();
        per.Walk();
        Console.WriteLine(per.Name);//讀值
        Console.WriteLine(per.Gender);
        Consoel.Writeline(per.Age);
        Console.ReadKey();
    }
}

二、構造方法

一般方法例項化類時,存在的問題有:

1.賦值繁瑣,重複書寫物件名

2.對使用者不能隨意改動的只讀型別的屬性,在例項化之後就不能對物件進行初始化

類的構造方法

為解決上面的問題,建立構造方法:

1.構造方法用來建立物件,對構造方法中對物件進行初始化

2.構造方法用來建立物件的特殊方法,方法和類名一樣,沒有返回值,連void都不用

3.構造方法可以有引數,例項化物件的時候傳遞引數即可

4.如果自己不建立構造方法,則類中有一個預設的無參構造方法

5.如果自己建立了構造方法,則不再有預設的構造方法

6.構造方法可以過載

程式碼舉例

public class Student
{
    public Student (string name,char gender,int age,int chinese,int math,int english)
    {
        this._name=name;
        this._gender=gender;
        this._age=age;
        this._chinese=chinese;
        this._math=math;
        this._english=english;
    }
}

程式碼實現

一般方法,例項化類的程式碼

class Program
{
    static void Main(string[] args)
    {
        //張三
        Student zsStu = new Student();
        zsStu.Name = "張三";
        zsStu.Age = 18;
        zsStu.Gender = '男';
        zsStu.Chinese = 98;
        zsStu.Math = 95;
        zsStu.English = 80;
        //小蘭
        Student xlStu = new Student();
        xlStu.Name = "小蘭";
        xlStu.Age = 18;
        xlStu.Gender = '女';
        xlStu.Chinese = 95;
        xlStu.Math = 85;
        xlStu.English = 60;
    }
}

建立構造方法後,例項化類程式碼

class Program
{
    static void Main(string[] args)
    {
        Student zsStu=new Student("張三",'男',18,98,95,80)
        Student xlStu=new Student("小蘭",'女',18,95,85,60)
        Console.ReadKey();
    }
}

例項化和初始化

例項化是針對類來說的,就是下面這一行程式碼

Student zsStu = new Student();

而初始化是針對物件的,也就是在例項化的基礎上,對zsStu的各個屬性賦初始值

Student zsStu = new Student();
zsStu.Name = "張三";
zsStu.Age = 18;
zsStu.Gender = '男';
zsStu.Chinese = 98;
zsStu.Math = 95;
zsStu.English = 80;

比如,例項化Person類就是知道這裡有個人,而初始化一個人就是我們知道了這個人的具體資訊。

三、名稱空間

在不容名稱空間下的類的呼叫有兩種方法:

1.寫全稱 名稱空間.類名

2.先用using引用名稱空間,再呼叫

新增引用匯入名稱空間