C#從入門到入土(自學(xué)筆記)--Day3-創(chuàng)新互聯(lián)

學(xué)習(xí)目標(biāo):
  • 新學(xué)的知識(shí):能夠?qū)懗龃a,了解代碼知識(shí)
  • 舊知識(shí):區(qū)分形參和實(shí)參,引用類型等
  • 理解構(gòu)造函數(shù)和實(shí)例化對(duì)象的意義(謝邀已暈)

學(xué)習(xí)內(nèi)容:
  1. 結(jié)構(gòu)體,枚舉,類,繼承,多態(tài),重載基本知識(shí)語法

學(xué)習(xí)時(shí)間:
  • 2022/11/30 水曜日

學(xué)習(xí)產(chǎn)出:
  • 技術(shù)博客 1?篇
  • 代碼

目錄

創(chuàng)新互聯(lián)建站公司2013年成立,先為墨玉等服務(wù)建站,墨玉等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為墨玉企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

學(xué)習(xí)目標(biāo):

學(xué)習(xí)內(nèi)容:

學(xué)習(xí)時(shí)間:

學(xué)習(xí)產(chǎn)出:

C#枚舉

C#結(jié)構(gòu)體

C#類

構(gòu)造函數(shù):

類的靜態(tài)(static)成員:

C#繼承

C#多態(tài)

靜態(tài)多態(tài)性:

動(dòng)態(tài)多態(tài)性:

總結(jié):


C#枚舉

枚舉(Enum)是命名整型常量,值類型,不可以繼承

enum{ 
    enumeration list 
};

//enum_name 指定枚舉的類型名稱。
//enumeration list 是一個(gè)用逗號(hào)分隔的標(biāo)識(shí)符列表。
//枚舉列表中的每個(gè)符號(hào)代表一個(gè)整數(shù)值,一個(gè)比它前面的符號(hào)大的整數(shù)值。默認(rèn)情況下,第一個(gè)枚舉符號(hào)的值是 0,enum里的值是遞增的,可以定義枚舉的值

案例:
public class EnumTest
{
    enum Day { Sun=1, Mon, Tue, Wed, Thu, Fri, Sat };

    static void Main()
    {
        int x = (int)Day.Sun;
        int y = (int)Day.Fri;
        Console.WriteLine("Sun = {0}", x);
        Console.WriteLine("Fri = {0}", y);
    }
}

//"Sun = 1"
//"Fri = 6"

//要注意的是:enum只能在同類內(nèi)使用


C#結(jié)構(gòu)體

結(jié)構(gòu)體:使一個(gè)單一變量可以存儲(chǔ)各種數(shù)據(jù)類型的相關(guān)數(shù)據(jù),結(jié)構(gòu)體不可以賦初值。和類同級(jí)

特點(diǎn):

  • 結(jié)構(gòu)可帶有方法、字段、索引、屬性、運(yùn)算符方法和事件。
  • 結(jié)構(gòu)可定義構(gòu)造函數(shù),但不能定義析構(gòu)函數(shù)。但是,您不能為結(jié)構(gòu)定義無參構(gòu)造函數(shù)。無參構(gòu)造函數(shù)(默認(rèn))是自動(dòng)定義的,且不能被改變。
  • 與類不同,結(jié)構(gòu)不能繼承其他的結(jié)構(gòu)或類。
  • 結(jié)構(gòu)不能作為其他結(jié)構(gòu)或類的基礎(chǔ)結(jié)構(gòu)。
  • 結(jié)構(gòu)可實(shí)現(xiàn)一個(gè)或多個(gè)接口。
  • 結(jié)構(gòu)成員不能指定為 abstract、virtual 或 protected。
  • 當(dāng)您使用?New?操作符創(chuàng)建一個(gè)結(jié)構(gòu)對(duì)象時(shí),會(huì)調(diào)用適當(dāng)?shù)臉?gòu)造函數(shù)來創(chuàng)建結(jié)構(gòu)。與類不同,結(jié)構(gòu)可以不使用 New 操作符即可被實(shí)例化。
  • 如果不使用 New 操作符,只有在所有的字段都被初始化之后,字段才被賦值,對(duì)象才被使用。
struct Books
    {
        private string title;
        private string author;
        private string subject;
        private int bookId;
        public void setValues(string t,string a,string s,int id)
        {
            title = t;
            author = a;
            subject = s;
            bookId = id;
        }
        public void display()
        {
            Console.WriteLine("Title : {0}", title);
            Console.WriteLine("Author : {0}", author);
            Console.WriteLine("Subject : {0}", subject);
            Console.WriteLine("Book_id :{0}", bookId);
        }

    }


class Program
    {
    static void Main(string[] args)
        {
            #region struct結(jié)構(gòu)體
            Books book1 = new Books();
            Books book2 = new Books();

            book1.setValues("11", "222", "3333", 44444);
            book2.setValues("22", "333", "4444", 55555);
            book1.display();
            book2.display();
            #endregion
        }
    }

C#類
  • 類定義了類的對(duì)象由什么組成及在這個(gè)對(duì)象上可執(zhí)行什么操作。
  • 對(duì)象是類的實(shí)例。構(gòu)成類的方法和變量稱為類的成員。
  • 我們定義一個(gè)類后,就必須實(shí)例化才給使用。實(shí)例化就是創(chuàng)建一個(gè)對(duì)象的過程
  • A a = new B(); 其中A是申明類,B是實(shí)例類。

成員變量是對(duì)象的屬性(從設(shè)計(jì)角度),且它們保持私有來實(shí)現(xiàn)封裝。這些變量只能使用公共成員函數(shù)來訪問。

案例:

class Box
    {
       private double length;   // 長(zhǎng)度
       private double breadth;  // 寬度
       private double height;   // 高度
       public void setLength( double len )
       {
            length = len;
       }

       public void setBreadth( double bre )
       {
            breadth = bre;
       }

       public void setHeight( double hei )
       {
            height = hei;
       }
       public double getVolume()
       {
           return length * breadth * height;
       }
    }
    class Boxtester
    {
        static void Main(string[] args)
        {
            Box Box1 = new Box();        // 聲明 Box1,類型為 Box
            Box Box2 = new Box();        // 聲明 Box2,類型為 Box
            double volume;               // 體積


            // Box1 詳述
            Box1.setLength(6.0);
            Box1.setBreadth(7.0);
            Box1.setHeight(5.0);

            // Box2 詳述
            Box2.setLength(12.0);
            Box2.setBreadth(13.0);
            Box2.setHeight(10.0);
       
            // Box1 的體積
            volume = Box1.getVolume();
            Console.WriteLine("Box1 的體積: {0}" ,volume);

            // Box2 的體積
            volume = Box2.getVolume();
            Console.WriteLine("Box2 的體積: {0}", volume);
           
            Console.ReadKey();
        }
    }
構(gòu)造函數(shù):

類的一個(gè)特殊的成員函數(shù),當(dāng)創(chuàng)建類的新對(duì)象時(shí)執(zhí)行。構(gòu)造函數(shù)的名稱與類的名稱完全相同,它沒有任何返回類型。

構(gòu)造函數(shù)的作用:

C#構(gòu)造函數(shù)(超詳解,建議收藏!!!)_Just Do Its的博客-博客_c#構(gòu)造函數(shù)

當(dāng)需要給一個(gè)類中的字段進(jìn)行初始化時(shí)。第一種:實(shí)例化后手動(dòng)給屬性賦值;第二種實(shí)例化時(shí)直接把參數(shù)放進(jìn)去自動(dòng)給屬性賦值

//無參構(gòu)造函數(shù)
class Line
   {
      private double length;   // 線條的長(zhǎng)度
      //在創(chuàng)建對(duì)象時(shí)就調(diào)用
      public Line()
      {
         Console.WriteLine("對(duì)象已創(chuàng)建");
      }

      //get,set函數(shù),我的理解是,一個(gè)是從成員變量拿到函數(shù)中,一個(gè)從成員函數(shù)拿到數(shù)據(jù),有一個(gè)通向外面的接口
      public void setLength( double len )
      {
         length = len;
      }
      public double getLength()
      {
         return length;
      }

      static void Main(string[] args)
      {
         Line line = new Line();    
         // 設(shè)置線條長(zhǎng)度
         line.setLength(6.0);
         Console.WriteLine("線條的長(zhǎng)度: {0}", line.getLength());
         Console.ReadKey();
      }
   }


//有參構(gòu)造函數(shù),在創(chuàng)建對(duì)象的同時(shí)給對(duì)象賦初始值
class Line
   {
      private double length;   // 線條的長(zhǎng)度
      public Line(double len)  // 參數(shù)化構(gòu)造函數(shù)
      {
         Console.WriteLine("對(duì)象已創(chuàng)建,length = {0}", len);
         length = len;
      }

      public void setLength( double len )
      {
         length = len;
      }
      public double getLength()
      {
         return length;
      }

      static void Main(string[] args)
      {
         Line line = new Line(10.0);
         Console.WriteLine("線條的長(zhǎng)度: {0}", line.getLength());
         // 設(shè)置線條長(zhǎng)度
         line.setLength(6.0);
         Console.WriteLine("線條的長(zhǎng)度: {0}", line.getLength());
         Console.ReadKey();
      }
   }

在這插一下話,我感覺菜鳥教程很多都沒有講清楚,要不是我之前學(xué)過其他語言,多少有點(diǎn)領(lǐng)悟,說實(shí)在的真看不懂,在此貼一個(gè)截圖,就是很基礎(chǔ)的東西,但是教程直接告訴你就這么寫,不會(huì)告訴為什么這么寫。這段話真的是深入內(nèi)心了已經(jīng)是,恍然大悟(說明之前學(xué)的也不好)。然后我往后翻了一下,下面的教程其實(shí)也有關(guān)于屬性的,但就是講的太晚了,懵懵懂懂學(xué)到那有啥用。來自C#的類(史上最全總結(jié))-不死鳥JGChttps://blog.csdn.net/jiangguangchao/article/details/108996447?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166979052216782429732105%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=166979052216782429732105&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-108996447-null-null.142%5Ev67%5Econtrol,201%5Ev3%5Eadd_ask,213%5Ev2%5Et3_control1&utm_term=C%23%E7%B1%BB&spm=1018.2226.3001.4187

析構(gòu)函數(shù):是類的一個(gè)特殊的成員函數(shù),當(dāng)類的對(duì)象超出范圍時(shí)執(zhí)行(程序認(rèn)為可以垃圾回收的時(shí)候才會(huì)有用,反正我試了很多次都不成功,還以為是我的問題呢,結(jié)果上網(wǎng)一搜,純粹是看C#“心情”哈哈哈哈)

class Line{
    ~Line() //析構(gòu)函數(shù)
      {
         Console.WriteLine("對(duì)象已刪除");
      }
}
類的靜態(tài)(static)成員:

靜態(tài)變量用于定義常量,因?yàn)樗鼈兊闹悼梢酝ㄟ^直接調(diào)用類而不需要?jiǎng)?chuàng)建類的實(shí)例來獲取。靜態(tài)函數(shù),這樣的函數(shù)只能訪問靜態(tài)變量。

class StaticVar
    {
       public static int num;
        //count函數(shù)被調(diào)用幾次,num值就+幾次
        public void count()
        {
            num++;
        }
        public static int getNum()
        {
            return num;
        }
    }
    class StaticTester
    {
        static void Main(string[] args)
        {
            
            StaticVar s = new StaticVar();
            s.count();
            s.count();
            s.count(); 
            //靜態(tài)方法不用實(shí)例化                 
            Console.WriteLine("變量 num: {0}", StaticVar.getNum());
            Console.ReadKey();
        }
    }

在菜鳥教程看到的筆記,最后一個(gè),截個(gè)圖C# 類(Class) | 菜鳥教程? 。我覺得這才是靜態(tài)方法的意義

1、使用 static 關(guān)鍵字修飾的類、字段、屬性、方法等;

2、靜態(tài)類只能包含靜態(tài)成員;

3、靜態(tài)成員可以使用類來訪問;

這應(yīng)該還有其他知識(shí)點(diǎn),留位置:比如this什么的?


C#繼承

基類和派生類

<訪問修飾符>class<基類>{
 ...
}
class<派生類>:<基類>{
 ...
}


案例:

class Rectangle
   {
      // 成員變量
      protected double length;
      protected double width;
      public Rectangle(double l, double w)
      {
         length = l;
         width = w;
      }
      public double getArea()
      {
         return length * width;
      }
      public void Display()
      {
         Console.WriteLine("長(zhǎng)度: {0}", length);
         Console.WriteLine("寬度: {0}", width);
         Console.WriteLine("面積: {0}", GetArea());
      }
   }//end class Rectangle  
   class Tabletop : Rectangle
   {
      private double cost;
      //子類繼承父類時(shí)必須構(gòu)造函數(shù),并且?guī)в邢嗤男螀?,并且后面要[ :base(參數(shù)) ]
      public Tabletop(double l, double w) : base(l, w)
      { }
      public double getCost()
      {
         cost = getArea() * 70;
         return cost;
      }
      public void Display()
      {
         base.Display();
         Console.WriteLine("成本: {0}", getCost());
      }
   }
   class ExecuteRectangle
   {
      static void Main(string[] args)
      {
         Tabletop t = new Tabletop(4.5, 7.5);
         t.Display();
         Console.ReadLine();
      }
   }

子類繼承父類時(shí)必須構(gòu)造函數(shù),并且?guī)в邢嗤男螀?,并且后面要加[ :base(參數(shù)) ]?。C#中的繼承(詳解)_木偶?的博客-博客_c#繼承?這個(gè)博客里有很詳細(xì)的講了base的關(guān)鍵字,不然還真不知道這個(gè)關(guān)鍵字干嘛的。

使用接口實(shí)現(xiàn)多重繼承:菜鳥里有,案例中除了多了一個(gè)接口其他沒變化,就只截個(gè)圖記錄一下。接口之后會(huì)學(xué)到。地址預(yù)留


C#多態(tài)
  1. 多態(tài)就是同一個(gè)接口,使用不同的實(shí)例而執(zhí)行不同操作
  2. 在靜態(tài)多態(tài)性中,函數(shù)的響應(yīng)是在編譯時(shí)發(fā)生的。在動(dòng)態(tài)多態(tài)性中,函數(shù)的響應(yīng)是在運(yùn)行時(shí)發(fā)生的。
  3. 同一個(gè)事件發(fā)生在不同的對(duì)象上會(huì)產(chǎn)生不同的結(jié)果
靜態(tài)多態(tài)性:
  • 函數(shù)重載
  • 運(yùn)算符重載

函數(shù)重載:

兩個(gè)重載函數(shù)必須在下列一個(gè)或兩個(gè)方面有所區(qū)別:

  1. 函數(shù)的參數(shù)個(gè)數(shù)不同。
  2. 函數(shù)的參數(shù)類型不同或者參數(shù)類型順序不同

本來我還是很懵逼的,然后看到了例子和重載的定義,我悟了大師,F(xiàn)12點(diǎn)開n那些關(guān)鍵字啥的不都是這個(gè)東西嗎。

比如string字符串的方法中就有:

public int CompareTo(object? value);

public int CompareTo(String? strB);

這兩個(gè)函數(shù),功能都是一樣的,返回值也一樣,但是參數(shù)類型就是不一樣啊。這就是多態(tài)性,重載的表現(xiàn)。

public class TestData  
    {  
        public int Add(int a, int b, int c)  
        {  
            return a + b + c;  
        }  
        public int Add(int a, int b)  
        {  
            return a + b;  
        }  
    }  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            TestData dataClass = new TestData();
            int add1 = dataClass.Add(1, 2);  
            int add2 = dataClass.Add(1, 2, 3);

            Console.WriteLine("add1 :" + add1);
            Console.WriteLine("add2 :" + add2);  
        }  
    }

運(yùn)算符重載:

重定義或重載 C# 中內(nèi)置的運(yùn)算符。因此,程序員也可以使用用戶自定義類型的運(yùn)算符。重載運(yùn)算符是具有特殊名稱的函數(shù),是通過關(guān)鍵字?operator?后跟運(yùn)算符的符號(hào)來定義的。有返回類型和參數(shù)列表。

class Box
    {
        private double length;
        private double breadth;
        private double height;
        public double getVolume()
        {
            return length * breadth * height;
        }

        public void setLength(double len)
        {
            length = len;
        }
        public void setBreadth(double bre)
        {
            breadth = bre;
        }
        public void setHeight(double hei)
        {
            height = hei;
        }
        //為Box類重載“+”運(yùn)算符,其他不影響
        public static Box operator +(Box b, Box c)
        {
            Box box = new Box();
            box.length = b.length + c.length;
            box.breadth = b.breadth + c.breadth;
            box.height = b.height + c.height;
            return box;
        }
    }

class Program
    {
     static void Main(string[] args)
        {
            #region 運(yùn)算符重載
            Box box1 = new Box();
            Box box2 = new Box();
            Box box3 = new Box();
            double volume = 0.0;

            box1.setLength(6.0);
            box1.setHeight(7.0);
            box1.setBreadth(5.0);
            box2.setLength(12.0);
            box2.setHeight(13.0);
            box2.setBreadth(15.0);

            volume = box1.getVolume();
            Console.WriteLine("box1 的體積: {0}", volume);
            volume = box2.getVolume();
            Console.WriteLine("box2 的體積: {0}", volume);
            //運(yùn)算符重載的方法,+號(hào)代表重載過的方法
            box3 = box1 + box2;
            volume = box3.getVolume();
            Console.WriteLine("box3 的體積: {0}", volume);
        }
    }

可重載和不可重載的運(yùn)算符:

C# 運(yùn)算符重載 | 菜鳥教程

動(dòng)態(tài)多態(tài)性:

動(dòng)態(tài)多態(tài)性是通過?抽象類?和?虛方法?實(shí)現(xiàn)的。

  • 抽象類(abstract):抽象方法,在父類中的空方法,表示父類有這個(gè)功能,子類繼承的話也會(huì)有,比如子類繼承父類的唱歌方法,但是子類唱哪種風(fēng)格的歌就和父類沒啥關(guān)系了,反正都是會(huì)唱歌。
    • 如果一個(gè)類中包含有抽象方法,那么這個(gè)類一定要聲明為抽象類。
    • 同時(shí),抽象方法一定需要在子類中重寫。(因?yàn)闆]實(shí)現(xiàn))
    • 抽象類不能(直接)實(shí)例化(繼承的子類可以實(shí)例化)。
    • 通過在類定義前面放置關(guān)鍵字?sealed,可以將類聲明為密封類。當(dāng)一個(gè)類被聲明為?sealed?時(shí),它不能被繼承。抽象類不能被聲明為 sealed
  • 虛方法(virtual):父類中可以被子類繼承重寫的方法。(也可以不重寫,因?yàn)樘摲椒ㄊ窃诟割愔芯鸵呀?jīng)實(shí)現(xiàn)了的)。對(duì)虛方法的調(diào)用是在運(yùn)行時(shí)發(fā)生的,所以每次調(diào)用重寫虛方法的子方法時(shí),虛方法也會(huì)被調(diào)用。
  • 繼承子類中的重寫虛函數(shù)需要聲明關(guān)鍵字 override,在方法參數(shù)傳入中寫(類名 形參名)例如 public void CallArea(Shape sh),意思是傳入一個(gè) shape 類型的類

C#中虛方法(virtual)詳解_木偶?的博客-博客_c# virtual

using System;
using System.Collections.Generic;

public class Shape
{
    //屬性
    public int X { get; private set; }
    public int Y { get; private set; }
    public int Height { get; set; }
    public int Width { get; set; }
   
    // 虛方法
    public virtual void Draw()
    {
        Console.WriteLine("執(zhí)行基類的畫圖任務(wù)");
    }
}

//下面三個(gè)是重寫父類虛方法的方法
class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("畫一個(gè)圓形");
        base.Draw();
    }
}
class Rectangle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("畫一個(gè)長(zhǎng)方形");
        base.Draw();
    }
}
class Triangle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("畫一個(gè)三角形");
        base.Draw();
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 創(chuàng)建一個(gè) List對(duì)象,并向該對(duì)象添加 Circle、Triangle 和 Rectangle
        var shapes = new List{
            new Rectangle(),
            new Triangle(),
            new Circle()
        };

        // 使用 foreach 循環(huán)對(duì)該列表的派生類進(jìn)行循環(huán)訪問,并對(duì)其中的每個(gè) Shape 對(duì)象調(diào)用 Draw 方法
        foreach (var shape in shapes)
        {
            shape.Draw();
        }

        Console.WriteLine("按下任意鍵退出。");
        Console.ReadKey();
    }

}

總結(jié):
  1. 緊趕慢趕把這一天該學(xué)的內(nèi)容學(xué)完了,今天學(xué)到的內(nèi)容有些繞,而且就算知道了概念,要在哪里運(yùn)用我還是不太清楚。按照學(xué)了這么長(zhǎng)時(shí)間代碼來看,肯定是要再多加訓(xùn)練,多加練習(xí)寫代碼才行。
  2. 每天復(fù)習(xí)前面的知識(shí),一定要復(fù)習(xí),不然學(xué)習(xí)一天,回去就忘光了。
  3. 今天學(xué)習(xí)的知識(shí)有:結(jié)構(gòu)體,枚舉,類,繼承,構(gòu)造函數(shù),靜態(tài),多態(tài),虛方法,抽象類,函數(shù)重載,運(yùn)算符重載。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站欄目:C#從入門到入土(自學(xué)筆記)--Day3-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://muchs.cn/article0/cdehio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、響應(yīng)式網(wǎng)站網(wǎng)站收錄、網(wǎng)站策劃、云服務(wù)器、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營(yíng)