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、子類、派生類;

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;

只能被繼承;

所有接口方法必須全部被繼承實現;否則報錯;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM