【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引用名稱空間,再呼叫
新增引用匯入名稱空間