C# 面向對象的封裝、繼承、多態
一、封裝:
封裝:把客觀的事物封裝成類,使用和修改方便;
作用和結構體使用方法相似,程序執行流程不同;
要點:成員變量,屬性,成員方法,構造函數,成員方法的靜態和非靜態,命名空間,常用的訪問修飾符public公共的、parvate私有的,只有類本身可以訪問,internal默認的,同一個命名空間下可以訪問、protected被保護的、同一個繼承關系下可以訪問;
重名問題:同一個作用域下不允許出現重名問題,最簡答解釋作用域就是一個花括號內,而每一個循環是不同的花括號的情況下重名是沒有關系的;
1、*****成員變量最基本的“經紀人”
class student //新建類
{
private string _name; //成員變量
public string name //屬性
{
get { return _name; } //return的作用就是扔給外面一個值。
//如果只有get,就只往外輸出固定的值;
set { _name = value; } //如果執行語句 student.name = "abcde"; 那麽這裏value的值就是"abcde";
//value的作用就是從外面賦予成員變量值。
}
2、*****成員變量可以有多個“經紀人”,而且數據類型可以不一致
private bool _sex;
public bool sex
{
get{ return _sex; }
set{ _sex = value; }
}
public string sexabc
{
get { return "abcd"+ _sex; } //如果執行語句 student.name = "abcde"; 那麽這裏value的值就是"請輸入false";
//如果執行語句 student.name = "false"; 那麽這裏value的值就是"abcdfalse";
set {
if(value == "false")
_sex = value;
else
_sex = "請輸入false";
}
}
3、*****構造函數
class student
{
public student() { } //創建構造函數就是執行了這一步;默認不被寫出來,但是真實存在;
}
student s = new student(); //這個過程叫實例化的過程;而student()這個方法就是一個構造函數;
總結:重建對象的過程就是將類實例化的過程;
實例化的過程就是執行構造函數的過程;
構造函數是在創建完類之後形成的;
4、*****成員方法
private string _name;
public string name
{
get { return _name; }
set { value = _name; }
}
public string say() //新建一個方法
{
return "啦啦啦"+_name;
}
student s = new student();
s.name = "abcd";
string str = s.say();
Console.Write(s.str); //輸出的是say這個方法返回的值,此時是 啦啦啦abcd;
總結:在構造函數內可以給private賦值;如果在外面重新賦值那麽就會覆蓋構造函數內給private賦的值,輸出新的,如果沒有賦值,那麽默認輸出構造函數內賦予的值;
5、*****靜態方法
含有static關鍵字的就是靜態方法;
實例化的靜態無法使用靜態的方法;
靜態的方法屬於類本身,要用類名點出來;public static int abc(){} 賦值方法是:student.abc(); student就是類名;
5、*****命名空間或者程序集
namespace;
需要引用using 空間名;
二、繼承
public class fly //父類,這是個類名;
{
}
public string brid:fly //子類,類名;可以繼承父級的公共用的屬性;
{
}
public string little brid:brid //孫子類,類名;可以繼承祖父類、父類的公共用的屬性;
{
}
1、 父類、基類
2、子類、派生類
三、多態(部分)
1、public vritual class plane:brid //vritual 虛擬的 override重寫
{
public override string (brid想要修改繼承的方法)
{ return "aaaaa"; }
}
方法名一樣是可以的,會以重載的方式顯示;
C# 面向對象的封裝、繼承、多態