zoukankan      html  css  js  c++  java
  • C#學習基礎類


    從定議上講,類是一种數據結構,這种數據結構可能包含數據成員,函數成員以及其它的嵌套

    類型.其中數據成員類型有常量,域和事件;函數成員類型有方法,屬性,索引指示器,操作符,

    構造函數,和析構函數.

    類的聲明
    格式如下:
    attributes  class-modifiers  CLASS identifier class-base class-body;
    其中attributes,class-modifiers,class-base,class-body為可選項,Attributes為屬性集

    ,class-modifiers為類的修飾符,關鍵詞class後跟隨類的名稱,identifier,class-base和

    class-body表示繼承方式和基類名.
    類的修飾符
    類的修飾符可以是以下幾种之一或者是它們的組合(在類的聲明中同一修飾符不允許出現多

    次):
    new--僅允許在嵌套類聲明時使用,表明類中隱藏了由基類中繼承而來的,與基類中同名的成

    員.
    public--表示不限制對該類的訪問.
    protected--表示只能從所在類和所在類派生的子類進行訪問.
    internal--只有其所在類才能訪問.
    private--只有對包.Net中的應用程序或庫才能訪問.
    abstract--抽像類,不允許建立類的實例.
    sealed--密封類,不允許被繼承.
    C#中的類只支持單繼承
    類的成員
    類的成員可以分為兩大類:類本身所聲明的,以及從基類中繼承而來的.
    類的成員有以下類型:
    成員常量,代表與類相關聯的常量值.
    域,即類中的變量.
    成員方法,復雜執行類中的計算和其它操作.
    屬性,用於定議類中的值,並對它們進行讀寫.
    事件,用於說明發生了什麼事情.
    索引指示器,允許像使用數組那樣為類添加路徑列表.
    操作符,定議類中特有的操作.
    構造函數和析構函數,分別用於對類的實例進行初始化和銷毀.
    包含有可執行代碼的成員被認為是類中的函數成員,這些函數成員有方法,屬性,索引指示器

    ,操作符,構造函數和析構函數.
    類的成員修飾符
    公有成員--C#中的公有成員提供了類的外部界面,允許類的使用者從外部進行訪問.公有成

    員的修飾符為public,這是限制最少的一种訪問方式.
    私有成員--C#中的私有成員僅限於類中的成員可以訪問,從類的外部訪問私有成員是不合法

    的,如果在聲明中沒有出現成員的訪問修飾符,按照默認方式成員為私有的.私有成員的修飾

    符為private.
    保護成員--為了方便派生類的訪問,又希望成員對於外界是隱藏的,這時可以使用protected

    修飾符,聲明成員為保護成員.
    內部成員--使用internal修飾符的類的成員是一种特殊的成員.這种成員對於同一包中的應

    用程序或庫是透明的,而在包.Net之外是禁止訪問的.
    下面的例子說明一下類的成員的訪問修飾符的用法.
    using system;
    class vehicle //定議汽車類
    {
      public int wheels;//公有成員:輪子個數
      protected float weight;//保護成員:重量
      public void F()
      {
        wheels=4;//正確,允許訪問自身成員
        weight=10;//正確,允許訪問自身成員
      }
    };
    class train //定議火車類
    {
      public int num;//公有成員,車廂數目
      private int passengers;//私有成員,乘客數
      private float weight;//私有成員,重量
      public void F()
      {
        num=5;//正確,允許訪問自身成員
        weight=100;//正確,允許訪問自身成員
        Vehicle v1=new Vehicle();
        v1.wheels=4;//正確,允許訪問v1的公有成員
        //v1.weight=6;錯誤,不允許訪問v1的保護成員
        weight=6;
      }
    }
    class Car:Vehicle //定議轎車類,繼承自汽車類
    {
      int passengers;//私有成員:乘客數
      public void F()
      {
        Vehicle v1=new Vehicle();
        v1.wheels=4;  //正確,允許訪問v1的公有成員
        v1.weight=6;//正确,允許訪問v1的保護成員
      }
    }
    this保留字
    保留字this僅限於在構造函數,類的方法和類的實例中使用,它有以下含議:
    在類的構造函數中出現的this作為一個值類型,它表示對正在構造的對像本身的引用.
    在類的方法中出現的this作為一個值類型,它表示對調用該方法的對像的引用.
    在結構的構造函數中出現的this作為一個變量類型,它表示對正在構造的結構的引用.
    在結構的方法中出現的this作為一個變量類型,它表對調用該方法的結構的引用.
    除此以外,在其它地方使用this保留字都是不合法的.
    下面的代碼演示了如何使用this保留字.
    using system;
    class A
    {
      public int x;
      public void Main()
      {
        x=5;
        Console.WriteLine("The value of x is:{0}",x);
        Console.WriteLine("The value of this x is:{0}",this.x);
      }
    }
    程序運行的結果應該是:
    The value of x is:5
    The value of this x is:5

    下面再舉一個例子說明this的用法
    using system;
    class face
    {
      int x;
      public int GetFace()
      {
        float temp;
        int save=x;
        int a=1;
        while (x>a)
        {
          a++;
          temp=this.x/a;
          x/=a;
          if ((float)x!=temp)
          {
            return -1;
          }
        }
        swap(this.x,save);
        return save;
      }
    }

    靜態成員和非靜態成員
    類中的成員要麼是靜態的,要麼是非靜態的.一般來說,靜態成員是屬於類所有的,非靜態成

    員是屬於類的實例----對像.
    以下示例代碼演示了如何聲明靜態和非靜態成員
    using system;
    class test
    {
      int x;
      static int y;
      void f()
      {
        x=1;  //正確.等價於this.x=1
        y=1;  //正確.等價於test.y=1
      }
    }
    static void g()
    {
      x=1;  //錯誤,不能訪問this.x
      y=1;  //正確,等價於test.y=1
    }
    static void main()
    {
      Test t=new Test();
      t.x=1;  //正確
      t.y=1;  //錯誤,不能在類的實例中訪問靜態成員
      Test.x=1;  //錯誤,不能按類訪問非靜態成員
      Test.y=1;  //正確
    }
    類的非靜態成員屬於類的實例所有,每創建一個類的實例,都在內存中為非靜態成員開辟了

    一塊區域.而類的靜態成員屬於類所有,為這個類的所有實例所共享.無論這個類創建了多少

    個副本,一個靜態成員在內存中只占有一塊區域.

    成員常量
    下面是一個成員常量的聲明的例子:
    class a
    {
      public const double x=1.0;
      public const double y=2.0;
      public const double z=3.0;
    }
    關鍵字const用於聲明常量,後跟數據類型的聲明.類的常量可 加上以下修飾符:
    new
    public
    protected
    internal
    private

    構造函數和析構函數
    構造函數用於執行類的實例的初始化.在訪問一個類的時候,系統將最先執行構造函數中的

    語句.實際上,任何構造函數的執行都隱式地調用了系統提供默認的構造函數base().
    使用構造函數請注意以下幾個問題:
    一個類的構造函數通常與類名相同.
    構造函數不聲明返回類型.
    一般地,構造函數總是public類型的.如果是private類型的,表明類不能被實例化,這通常用

    於只含有靜態成員的類.
    在構造函數中不要做對類的實例進行初始化以外的事情,也不要嘗試顯式地調用構造函數.
    下面的例子示範了構造函數的使用:
    class a
    {
      int x=0,y=0,count;
      public a()
      {
        count=0;
      }
      public a(int vx,int vy)
      {
        x=vx;
        y=vy;
      }
    }
    構造函數的參數
    構造函數可以是不帶參數的,這樣對類的實例的初始化是固定的.有時,我們在對類進行實例

    化時,需要傳遞一定的數據,來對其中的各种數據初始化,使得初始化不再是一成不變的,這

    時,我們可以使用帶參數的構造函數,來實現對類的不同實例的不同初始化.
    在帶有參數的構造函數中,類在實例化時必須傳遞參數,否則該構造函數不被執行.
    下面是一個例子
    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;

    namespace WindowsApplication1
    {
        public class Vehicle //定議汽車類
        {
            public int wheels;//公有成員;輪子個數
            protected float weight; //保掮成員;重量
            public Vehicle() { ;}
            public Vehicle(int w, float g)
            {
                wheels = w;
                weight = g;
            }
            public void Show()
            {
                Console.WriteLine("the wheel of vehicle is:{0}", wheels);
                Console.WriteLine("the weight of vehicle is:{0}", weight);
            }
        }
        class Train //定議火車類
        {
            public int num;
            private int passengers;
            private float weight;
            public Train() { ;}
            public Train(int n, int p, float w)
            {
                num = n;
                passengers = p;
                weight = w;
            }
            public void Show()
            {
                Console.WriteLine("the num of train is:{0}", num);
                Console.WriteLine("the weight of train is:{0}", weight);
                Console.WriteLine("thie Passengers train car is:{0}", passengers);
            }
        }
        class Car : Vehicle//定議轎車類
        {
            int passengers;
            public Car(int w, float g, int p)
                : base(w, g)
            {
                wheels = w;
                weight = g;
                passengers = p;
            }
            new public void Show()
            {
                Console.WriteLine("the wheel of car is:{0}", wheels);
                Console.WriteLine("the weight of car is:{0}", weight);
                Console.WriteLine("thie passengers of car is:{0}", passengers);
            }
        }
        class Test
        {
            public static void Main()
            {
                Vehicle v1 = new Vehicle(4, 5);
                Train t1 = new Train();
                Train t2 = new Train(10, 100, 100);
                Car c1 = new Car(4, 2, 4);
                v1.Show();
                t1.Show();
                t2.Show();
                c1.Show();
            }
        }
    }
    程序運行結果如下:
    the wheel of vehicle is:4
    the weight of vehicle is:5
    the num of train is:0
    the weight of train is:0
    thie Passengers train car is:0
    the num of train is:10
    the weight of train is:100
    thie Passengers train car is:100
    the wheel of car is:4
    the weight of car is:2
    thie passengers of car is:4
    析構函數
    在類的實例超出範圍時,我們希望確保它所占的存儲能被收回.C#中提供了析構函數,用於專門釋放被占用的系統資源.
    析構函數的名字和類名相同,只是在前面加了一個符號"~".析構函數不接受任何參數,也不返回任何值.

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    让IE6/IE7/IE8支持HTML5标签的js代码
    你应该抓紧学习Python,它是开发Web应用最强大的语言
    细数IE6的一串串的恼人bug,附加解决方法!
    邪恶的编码:复制与粘帖
    谈谈微信公众平台开发
    jQuery练手:仿新浪微博图片文字列表淡进淡出上下滚动效果
    DIV-CSS布局中position属性详解
    解决java编译错误:编码GBK的不可映射字符
    离线下载安装 NLTK 的 nltk_data 模块
    Python NLTK 自然语言处理入门与例程(转)
  • 原文地址:https://www.cnblogs.com/Athrun/p/943175.html
Copyright © 2011-2022 走看看