一、封裝:
封裝:把客觀的事物封裝成類,使用和修改方便;
作用和結構體使用方法相似,程序執行流程不同;
要點:成員變量,屬性,成員方法,構造函數,成員方法的靜態和非靜態,命名空間,常用的訪問修飾符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、子類、派生類;
3、父類可以有無數個后輩類;
4、一個子類只能有一個父類;
三、多態
public class brid
{
public virtual string eat()
{ return "aaaaa"; }
}
public class little brid:brid
{
public override string eat()
{ return "abcdefg"; }
}
1、方法名一樣是可以的,會以重載的方式顯示,參數不同;
2、virtual 虛擬的,override重寫,voerload重載;
3、*****抽象類 / 抽象方法:
abstract class fly
{
public abstract string eat();
}
class brid :fly
{
public override string eat()
{ return "aaaaaa"; }
}
抽象方法必須放在抽象類里;
抽象類無法被實例化;
抽象類里如果有抽象方法,所有繼承過次抽象類的后輩類,必需要return一個值;
抽象類不只有抽象方法;
抽象類只能當做父級使用;
abstarct 關鍵字;
4、*****接口
interface fly
{
string flying();
}
關鍵字interface;
接口不能有實質性的方法;
無法被實例化;
不需要訪問修飾符,默認public;
只能被繼承;
所有接口方法必須全部被繼承實現;否則報錯;
