【C#基礎(chǔ)學(xué)習(xí)】第十一章、類-創(chuàng)新互聯(lián)

目錄

10余年的盧氏網(wǎng)站建設(shè)經(jīng)驗(yàn),針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。全網(wǎng)整合營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整盧氏建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)公司從事“盧氏網(wǎng)站設(shè)計”,“盧氏網(wǎng)站推廣”以來,每個客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

1.類的概述

1.1 類的定義

1.2 程序和類

2.聲明類(類定義)

2.1 分部類和分布類型?

3.類成員

3.1 字段

3.1.1 字段的語法

3.1.2 顯示字段和隱式字段的初始化

3.1.3 字段的修飾符:readonly關(guān)鍵字&const關(guān)鍵字

3.1.4 靜態(tài)字段

3.2 常量

3.2.1 使用readonly關(guān)鍵字&const關(guān)鍵字來修飾字段的區(qū)別

3.3 屬性

3.3.1 屬性的組成

3.3.2 靜態(tài)屬性

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

3.4.1 實(shí)例構(gòu)造函數(shù)

3.4.2 靜態(tài)構(gòu)造函數(shù)

3.5 析構(gòu)函數(shù)

3.6 索引器

3.6.1 this關(guān)鍵字

3.6.2 索引器的語法

4.類的實(shí)例

4.1實(shí)例化

4.1.1 實(shí)例對象

4.1.2 對象初始化語句


? C#是一種面向?qū)ο蟮恼Z言,這點(diǎn)與C語言不同,C語言是一種面向過程的語言。除此之外,面向?qū)ο蟮恼Z言還有C++、Java等。而面向?qū)ο笳Z言的一個基本特征是它們都有類,類是C#中比較復(fù)雜的數(shù)據(jù)類型。

?本章將先講明 什么是類,并說明類由什么組成,組成類的函數(shù)成員和數(shù)據(jù)成員怎么用,接著講如何實(shí)例一個類。


1.類的概述

?就像第五章數(shù)據(jù)類型里對類型的解釋一樣。

帶到現(xiàn)實(shí)中來看,大象這個物種就是一個類。大象這個物種的共同的特性(比如 年齡、分布區(qū)域、歸屬群落、性別,體型等)和行為(吃草、繁衍、行走、潛水等)就是類的公共屬性和行為。類的實(shí)例就是大象這個物種中的一頭大象。

1.1 類的定義

? 類是一個能存儲數(shù)據(jù)并執(zhí)行代碼的數(shù)據(jù)結(jié)構(gòu)。

類包含數(shù)據(jù)成員和函數(shù)成員。(一個C#類可以有任意數(shù)目的數(shù)據(jù)成員和函數(shù)成員)

  • 數(shù)據(jù)成員:存儲 與類或類的實(shí)例 相關(guān)的數(shù)據(jù)。數(shù)據(jù)成員通常模擬和該類所表示的現(xiàn)實(shí)世界事務(wù)的特性。
  • 函數(shù)成員:它執(zhí)行代碼。通常會模擬類所表示的現(xiàn)實(shí)世界的功能和操作

1.2 程序和類

一個運(yùn)行中的C#程序是一組相互作用的類型對象,它們中大部分都是類的實(shí)例。


2.聲明類(類定義)

類的聲明定義類的特征和成員。

聲明一個類并不創(chuàng)建類的實(shí)例,而是用于創(chuàng)建實(shí)例的模板。

聲明類的語法:

class 大象(類的名稱)? ? ?//聲明類

{

? string sex;????????????????//數(shù)據(jù)成員聲明(類的成員)

? ...

? void swim(){...}? ? ? //函數(shù)成員聲明(類的成員)

? ...

}?

聲明類必須包含:

  • 類的名稱
  • 類的成員
  • 類的特征(封裝、繼承、多態(tài),第十四章會講)

2.1 分部類和分布類型?

類聲明可以分割為幾個分布類的聲明

  • 每個分布類的聲明都含有一些類成員的聲明。
  • 類的分布類聲明可以在同一個文件中、也可以在不同文件中。

分布類的使用要求:?

  • 類聲明必須加類型修飾符 partical
  • 類名稱相同
  • 組成類的所有分布類聲明必須在一起編譯

//示例:
partical class A //類名稱相同
{
    int a;
}

partical class A 
{
    int b;
}

3.類成員

(注意:本章主講實(shí)例成員,靜態(tài)成員放在十三章講)

在類聲明中定義的類成員有9種成員類型。

其中字段和方法是最重要的類成員類型。(本章不會介紹事件)

3.1 類成員的類型

?

類聲明相當(dāng)于藍(lán)圖,通過藍(lán)圖可以創(chuàng)建多個類的實(shí)例。

? 通過類創(chuàng)建的實(shí)例,其中的類成員分為兩種:實(shí)例成員和類成員。

  • 實(shí)例成員:每個類的實(shí)例都是不同的個體,它們有自己獨(dú)有的一組類成員。且因?yàn)檫@些數(shù)據(jù)成員都和類的實(shí)例相關(guān),所以稱為實(shí)例成員。
  • 靜態(tài)成員:實(shí)例成員是默認(rèn)類型,但也可以聲明與類而不是實(shí)例相關(guān)的成員,也就是靜態(tài)成員。

3.1 字段

字段是在類或結(jié)構(gòu)中直接聲明的任意類型的變量。

3.1.1 字段的語法

聲明字段的語法:

?????????????????????數(shù)據(jù)類型? 字段名;

例如:

?????????????????????int a;

3.1.2 顯示字段和隱式字段的初始化

隱式字段初始化:若字段被聲明且沒有被賦值,則為隱式初始化。

不同類型隱式初始化的默認(rèn)值:?

  • 值類型為0
  • bool類型為false
  • 引用類型為null

3.1.3 字段的修飾符:readonly關(guān)鍵字&const關(guān)鍵字

被readonly和const修飾的字段一旦賦值便不能再被修改。

readonly關(guān)鍵字&const的區(qū)別:

  • 若使用readonly來修飾字段,則不需要在定義時初始化,可以在類的構(gòu)造函數(shù)完成初始化。
  • 若使用const來修飾字段,如果沒有在定義時初始化,就會發(fā)生編譯錯誤。

語法:

? 訪問修飾符 const 數(shù)據(jù)類型 變量名=值;

? 訪問修飾符 readonly 數(shù)據(jù)類型 變量名;

3.1.4 靜態(tài)字段

若使用static關(guān)鍵字修飾字段,則字段為靜態(tài)字段。

? 靜態(tài)字段被類的所有實(shí)例所共享,所有實(shí)例都訪問同一內(nèi)存位置。

靜態(tài)字段必須通過類來訪問,不能像實(shí)例字段一樣通過類的對象的實(shí)例來訪問字段。

語法:

? 訪問修飾符 static 數(shù)據(jù)類型 變量名;? ? ? ? //靜態(tài)字段定義

? 訪問修飾符 數(shù)據(jù)類型 變量名;? ? ? ? ? ? ? ? ?//實(shí)例字段定義

實(shí)例1:

class People
{
    //聲明靜態(tài)字段
    public static string Name; 
    //聲明實(shí)例字段
    public int Age;
}

class Program
{
    static void Main(string[] args)
    {
        //實(shí)例字段通過實(shí)例對象訪問
        People one=new People();
        one.Age=18;
        //靜態(tài)字段只能通過類名訪問
        People.Name="人類";
    }
}

實(shí)例2:

3.2 常量

? 常量就是被const修飾的字段。

常量的特點(diǎn):

  • 類成員常量類似于局部變量。區(qū)別在于常量在類聲明中,而局部變量在方法中。
  • 常量在堆中沒有自己的存儲位置,它在編譯時被編譯器替換。(類似C、C++中的#define)
  • 常量可以用類名直接訪問。
  • 常量本質(zhì)上就是靜態(tài)的。

3.3 屬性

屬性是對字段的擴(kuò)展。

根據(jù)面向?qū)ο笳Z言的封裝思想(見第十章),字段最好設(shè)置為private。這樣能防止客戶端直接對字段進(jìn)行篡改,從而保證了內(nèi)部成員的完整性的同時,也可以更好的為程序員提供編寫的便利。而屬性的作用就是為了訪問類中的私有字段。

屬性的語法:

? 訪問修飾符? 數(shù)據(jù)類型? 字段名{get{return 字段名;}set{字段名=value;}}

3.3.1 屬性的組成

屬性由set訪問器和get訪問器組成。

屬性可以只包含set或get,當(dāng)只包含一個訪問器時,另一個可以省略、或者在前面加訪問修飾符private。

屬性除了開頭的語法,還有三種寫法:

  • 只包含get訪問器,為只讀屬性。
  • 只包含set訪問器,為只寫屬性。
  • 只聲明屬性(自動實(shí)現(xiàn)屬性)
屬性的示例:設(shè)置一個人的年齡字段,將賦值范圍設(shè)置在0-150之間
public class People

{
    //私有字段聲明
    private int age;
    private string name;
    private string sex;
    private string high;

    //公有屬性:屬性類型必須和字段屬性一致
    public? string? Age
    {
        //get訪問器:負(fù)責(zé)對字段值進(jìn)行讀?。ǚ祷刈侄危?        get
        {
            return age;
        }
        //set訪問器:負(fù)責(zé)對字段值進(jìn)行賦值(把用戶傳入的值賦給字段)
        //set訪問器里有隱式參數(shù)value
        set
        {
            //設(shè)置年齡范圍在0-150之間
            if(value<0 || value>150)
            {
                //拋出異常代碼
                throw(new ArgumentOutOfRangeException("AgeIntProPery"),value,"年齡必須在0-150之間"));
            }
            //value是隱式參數(shù):表示用戶傳入的值
            age=value;
        }
    }

    //只讀屬性
    public string Sex
    {
        get
        {
            return sex;
        }
    }
    //只寫屬性
    public string Name
    {
        private get
        {
            return name;
        }
        set
        {
            name=value;
        }
    }
    //自動實(shí)現(xiàn)屬性
    public string High
    {
        get;set;
    }
}

屬性字段命名規(guī)范:

  • 對于私有字段,為Camle寫法,即age、name這種。
  • 對于屬性名,為Pascal寫法,即Age、Name這種。

3.3.2 靜態(tài)屬性

? 靜態(tài)屬性與靜態(tài)字段類似。?若用static來修飾屬性,則屬性為靜態(tài)屬性。

靜態(tài)屬性有以下特點(diǎn):

  • 靜態(tài)屬性屬于類級別,無法通過實(shí)例對象訪問。
  • 也不能訪問類的實(shí)例成員,但能被實(shí)例成員訪問。
  • 在類的內(nèi)部,可以僅使用名稱來引用靜態(tài)屬性
  • 在類的外部,可以通過類名或者using static結(jié)構(gòu)來引用靜態(tài)屬性

實(shí)例:

public class People
{
    //靜態(tài)字段
    public static string Name;
    
    //靜態(tài)屬性
    public static string Name
    {
        get
        {
            return Name;
        }
        set
        {
            Name = value;
        }
    }
}

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

構(gòu)造函數(shù)主要用于初始化類的實(shí)例狀態(tài)。當(dāng)我們用構(gòu)造函數(shù)創(chuàng)建一個對象時,構(gòu)造函數(shù)會為對象分配空間,并初始化類的成員。

使用構(gòu)造函數(shù)的要求:

  • 如果希望從類的外部創(chuàng)建類的實(shí)例,需要將構(gòu)造函數(shù)聲明為public
  • 構(gòu)造函數(shù)名和類名相同
  • 構(gòu)造函數(shù)不能有返回值

構(gòu)造函數(shù)分為兩種:實(shí)例構(gòu)造函數(shù)、靜態(tài)構(gòu)造函數(shù)。

3.4.1 實(shí)例構(gòu)造函數(shù)

實(shí)例構(gòu)造函數(shù)用于創(chuàng)建和初始化類的實(shí)例。

其中使用new運(yùn)算符創(chuàng)建對象的過程,其實(shí)是在調(diào)用實(shí)例構(gòu)造函數(shù)來初始化類中所有實(shí)例成員。

實(shí)例構(gòu)造函數(shù)的特點(diǎn):

  • 構(gòu)造函數(shù)可以有參數(shù)。
  • 構(gòu)造函數(shù)可以進(jìn)行方法重載。
  • 如果沒有為類顯示地定義一個構(gòu)造函數(shù),則C#編譯器會自動生成一個函數(shù)體為空的默認(rèn)無參的實(shí)例構(gòu)造函數(shù)。如果有至少一個顯示構(gòu)造函數(shù),則C#編譯器不會自動生成多的構(gòu)造函數(shù)。
  • 可以為構(gòu)造函數(shù)添加訪問修飾符。

使用實(shí)例構(gòu)造函數(shù)的條件:

  • 構(gòu)造函數(shù)必須和類同名。
  • 構(gòu)造函數(shù)不允許有返回類型。
//實(shí)例構(gòu)造函數(shù)示例:
class People
{
    private string name;

    //只讀屬性
    public string Name
    {
        get
        {
            return name;
        }
    }
    
    //實(shí)例構(gòu)造函數(shù)
    //被public關(guān)鍵字修飾的構(gòu)造函數(shù),稱為公共構(gòu)造函數(shù)
    //被private關(guān)鍵字修飾的構(gòu)造函數(shù),稱為私有構(gòu)造函數(shù)
    public People()
    {
        name="憨憨一號";
    }

    public people(string name)
    {
        //this關(guān)鍵字指代當(dāng)前類的實(shí)例,可以理解為當(dāng)前實(shí)例對象的引用。
        this.name=name;
    }
}

class Program
{
    static void Main(string[] args)
    {
        People one=new People();
        People two=new People("憨憨二號");
        
        Console.Writeline(one.Name);    //打印“憨憨一號”
        Console.Writeline(two.Name);    //打印“憨憨二號”
    }
}

注意:如果一個類只定義了一個或多個私有構(gòu)造函數(shù),而沒有其他公共構(gòu)造函數(shù),則其他類就不能通過調(diào)用該類的私有構(gòu)造函數(shù)來創(chuàng)建類的實(shí)例。

私有構(gòu)造函數(shù)最典型的應(yīng)用是設(shè)計模式中單例模式的實(shí)現(xiàn)。

單例模式是C#中的一種設(shè)計模式,他是指在設(shè)計一個類時,需要保證整個程序在運(yùn)行期間只存在一個實(shí)例對象。

//設(shè)計模式中單例模式的實(shí)現(xiàn):
class People
{
    //聲明私有字段
    private string name;
    //聲明一個公開的、靜態(tài)的、類類型的變量
    public static People people;
    
    //聲明屬性
    public string Name
    {
        get{return name;}
    }

    //私有構(gòu)造函數(shù),只能在類的內(nèi)部調(diào)用
    //也就是說用私有構(gòu)造函數(shù)只能在類定義時被實(shí)例化
    private People()
    {
        Console.Writeline("私有函數(shù)被調(diào)用");
        this.name="Learning Hard";
    }
    
    //靜態(tài)方法,用于返回類的實(shí)例
    public static People GetInstance()
    {
        //將實(shí)例對象的引用賦值給變量
        people=new People();
        return people;
    }
}
class Program
{
    static void Main(string[] args)
    {
        //通過調(diào)用GetInstance()靜態(tài)方法返回一個Person的實(shí)例
        //此時不能使用new運(yùn)算符來創(chuàng)建實(shí)例,即不能使用People one=new People()來創(chuàng)建實(shí)例
        People one=People.GetInstance();

        Console.Writeline("類實(shí)例的Name屬性為{0}",one.Name);
    }
}

3.4.2 靜態(tài)構(gòu)造函數(shù)

靜態(tài)構(gòu)造函數(shù)用于初始化類中的靜態(tài)成員。

在創(chuàng)建第一個實(shí)例或引用任何靜態(tài)成員之前,CLR(公共語言運(yùn)行時)都將自動調(diào)用靜態(tài)構(gòu)造函數(shù)。

class People
{
    
    private static string name;
    

    //聲明屬性
    public static string Name
    {
        get{return name;}
    }

    static People()
    {
        Console.WriteLine("靜態(tài)函數(shù)被調(diào)用");
        name="Learning Hard";
    }
    
}
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(People.Name);
        Console.WriteLine(People.Name);
    }
}

結(jié)果如下:

從上述代碼我們可知靜態(tài)構(gòu)造函數(shù)有以下特點(diǎn):

  • 靜態(tài)構(gòu)造函數(shù)只會執(zhí)行一次
  • 靜態(tài)構(gòu)造函數(shù)不能使用任何訪問修飾符,也不能帶任何參數(shù)
  • 不能直接調(diào)用靜態(tài)構(gòu)造函數(shù)
  • 在程序中,我們無法控制執(zhí)行靜態(tài)構(gòu)造函數(shù)的時機(jī)

3.5 析構(gòu)函數(shù)

析構(gòu)函數(shù)用于類銷毀之前釋放類實(shí)例所使用的托管和非托管資源。

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

對于C#應(yīng)用程序所創(chuàng)建的大多數(shù)對象,都可以使用.NET框架的垃圾回收器(GC)來隱式地執(zhí)行內(nèi)存管理任務(wù),但如創(chuàng)建了一個封裝非托管資源的對象,在應(yīng)用程序使用完這些非托管資源之后,垃圾回收器就需要運(yùn)行對象的析構(gòu)函數(shù)(即Finalize方法)來釋放這些資源。

使用析構(gòu)函數(shù)的要求:

  • 只能在類中使用析構(gòu)函數(shù)。
  • 一個類只能有一個析構(gòu)函數(shù)。
  • 無法繼承或重載析構(gòu)函數(shù)。
  • 無法顯示地調(diào)用析構(gòu)函數(shù),由垃圾回收器自動調(diào)用。
  • 析構(gòu)函數(shù)沒有參數(shù)和修飾符。

代碼示例:

class People
{
    //析構(gòu)函數(shù)
    ~People()
    {
        Console.WriteLine("析構(gòu)函數(shù)被調(diào)用");
    }
}
//該析構(gòu)函數(shù)隱式調(diào)用了基類Object的Finalize方法,上面代碼中的析構(gòu)函數(shù)將被隱式轉(zhuǎn)化為以下代碼


//
//override
protectd override void Finalize()
{
    try
    {
        Console.WriteLine("析構(gòu)函數(shù)被調(diào)用");
    }
    finally
    {
        //調(diào)用基類方法
        base.Finalize();
    }
}
3.6 索引器

當(dāng)一個類包含數(shù)組成員時,使用索引器可以大大地簡化類中數(shù)組的訪問。

3.6.1 this關(guān)鍵字

? this關(guān)鍵字在類中使用,是對當(dāng)前實(shí)例的引用。

this關(guān)鍵字的使用要求:

  • 它只能出現(xiàn)在以下類成員的代碼塊中
    • 實(shí)例構(gòu)造函數(shù)
    • 實(shí)例方法
    • 屬性和索引器的實(shí)例訪問器
  • 靜態(tài)成員不是實(shí)例的一部分,所以不能在任何靜態(tài)函數(shù)成員的代碼中使用this關(guān)鍵字

this關(guān)鍵字的用途:

  • 用于區(qū)分類的成員和局部變量或參數(shù)
  • 作為調(diào)用方法的實(shí)參
//實(shí)例:創(chuàng)建一個方法,將一個恒定值與輸入的值作比較,返回大值
class Program
{
    private int a;
    //this.a為恒定值,而a為輸入的形參(形參名與變量名相同是不推薦的哦)
    public int Add(int a)
    {
        return a>this.a
                ?a
                :this.a;
    }
}
3.6.2 索引器的語法

索引器的定義類似屬性,也具有g(shù)et訪問器和set訪問器。

索引器的語法格式:

訪問修飾符? ?數(shù)據(jù)類型? this[索引類型 index]

{

? get{//返回類中某個元素}

? set{//對類中數(shù)組元素賦值}

}

//其中數(shù)據(jù)類型指的是要存取的數(shù)組的類型

//索引類型表示該索引器使用哪一個類型的索引來存取數(shù)組元素(可以為整形或字符串型)

示例:索引器也是一種針對私有字段進(jìn)行訪問的方式

class People
{
    //可容納10個整數(shù)的整數(shù)數(shù)組
    private int[] intarray = new int[10];
    
    //索引器的定義
    //this表示所操作的是類對象的數(shù)組成員(可以簡單理解為索引器的名稱,注意索引器不能自定義名稱)
    public int this[int index]
    {
        get{return intarray[index];}
        set{intarray[index] = value;}
    }
}

class Program
{
    static void Main(string[] args)
    {
        People one=new People();
        
        one[0]=1;
        one[1]=2;
        one[2]=3;
        one[3]=4;
    }
}


4.類的實(shí)例

類的聲明只是用于創(chuàng)建類的實(shí)例的藍(lán)圖。一旦類被聲明,就可以創(chuàng)建類的實(shí)例。

4.1實(shí)例化

前面介紹了類中可以創(chuàng)建的類成員,但想要訪問這些實(shí)例成員,必須通過類的實(shí)例對象來完成。而要得到一個類的實(shí)例對象,就必須先聲明一個該類類型的變量,然后使用new運(yùn)算符后跟類的實(shí)例構(gòu)造函數(shù)來完成實(shí)例化。

4.1.1 實(shí)例對象

實(shí)例對象由變量和對象創(chuàng)建表達(dá)式組成。

  • 創(chuàng)建變量
    • 類是引用類型,其變量為數(shù)據(jù)引用和實(shí)際數(shù)據(jù)都申請了內(nèi)存。
    • 此變量所分配內(nèi)存是用來保存引用的。
  • 對象創(chuàng)建表達(dá)式
    • 對象創(chuàng)建表達(dá)式由關(guān)鍵字new后面跟一個類構(gòu)造函數(shù)及其參數(shù)列表組成。
    • new運(yùn)算符為任意指定類型的實(shí)例分配并初始化內(nèi)存。它依據(jù)類成員類型的不同從棧和堆里分配內(nèi)存。

類的實(shí)例語法: 類類型 變量 = new 類類型();

//類類型 變量? ? ? ? ? ? ? ? ? ?是創(chuàng)建變量

//new 類類型();? ??????是對象創(chuàng)建表達(dá)式

4.1.2 對象初始化語句

對象初始化語句擴(kuò)展了創(chuàng)建語法,在表達(dá)式尾部放置一組成員初始化語句。

? 利用對象初始化語句,可以創(chuàng)建新的對象實(shí)例,設(shè)置字段和屬性的值。

兩種語法:

? new TypeName? ? ? ? ?{變量名=初始值,變量名=初始值,...}

? new TypeName(參數(shù)){變量名=初始值,變量名=初始值,...}

注意:

  • 初始化發(fā)生在構(gòu)造方法執(zhí)行之后,因此要注意構(gòu)造方法中初始化的值可能會在之后對象初始化中重置。

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

本文題目:【C#基礎(chǔ)學(xué)習(xí)】第十一章、類-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://muchs.cn/article6/dsgpig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃動態(tài)網(wǎng)站、營銷型網(wǎng)站建設(shè)、網(wǎng)站制作、電子商務(wù)企業(yè)建站

廣告

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

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司