程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#:類和結構的區別,

C#:類和結構的區別,

編輯:C#入門知識

C#:類和結構的區別,


第一、引用類型和值類型

類屬於引用類型,而結構屬於值類型。

結構在賦值時進行復制。 將結構賦值給新變量時,將復制所有數據,並且對新副本所做的任何修改不會更改原始副本的數據。

 

第二、繼承性

類可以繼承類或者實現接口,而結構只能實現接口,不能繼承結構。

 

第三、實例化

類的實例化需要使用new關鍵字,但是結構的實例化則可以不使用new關鍵字。

 

第四、構造函數

類可以顯式地包含無參的構造函數,但是結構卻不可以顯式地包含無參構造函數,只可以定義帶有參數的構造函數。

 

第五、初始化實例字段

類可以在類的定義中初始化實例字段,但是結構不可以。

在結構聲明中,除非字段被聲明為 const 或 static,否則無法初始化。

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 using System.Collections;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            ClassPerson cp = new ClassPerson();
            StructPerson sp = new StructPerson("Mary");
            cp.ShowName();
            sp.ShowName();
            Console.ReadKey();
        }
    }

    //可以繼承接口
    public struct StructPerson:IShowName 
    {
        private string name;
        /// <summary>姓名</summary>
        public string Name
        {
            get
            {
                return this.name;
            }
            set
            {
                this.name = value;
            }
        }

        //可以顯式地包含帶有參數的構造函數
        public StructPerson(string name)
        {
            this.name = name;
        }

        public void ShowName()
        {
            Console.WriteLine(this.Name);
        }
    }

    //可以繼承接口和類
    public class ClassPerson : Creature, IShowName
    {
        //可以在類的定義中初始化實例字段
        private string name="John";
        /// <summary>姓名</summary>
        public string Name
        {
            get
            {
                return this.name;
            }
            set
            {
                this.name = value;
            }
        }

        //可以顯式地包含無參的構造函數
        public ClassPerson()
            :base()
        {
        }
        public override void Move()
        {
            Console.WriteLine("Moving");
        }

        public void ShowName()
        {
            Console.WriteLine(this.Name);
        }
    }

    public interface IShowName
    {
        void ShowName();
    }

    public abstract class Creature
    {
        public abstract void Move();
    }
}

 

最後注意以下幾點:

①在結構中初始化實例字段 的方法:一是使用參數化構造函數,二是在聲明結構後分別訪問成員。 對於任何私有成員或以其他方式設置為不可訪問的成員,只能在構造函數中進行初始化。

②當不用new創建結構對象時需要注意,在初始化所有字段之前,字段將保持未賦值狀態,同時對象不可用。也就是說,在結構對象包含的所有字段(包含私有的、公有的、隱藏的(自動實現的屬性在運行時生成的))初始化之前,該結構對象中的方法或者屬性都不可以調用。

③當結構包含引用類型作為成員時,必須顯式調用該成員的默認構造函數,否則該成員將保持未賦值狀態且該結構不可用。


C語言裡面,這個符號(->)是什,怎使用?

這是結構體指針中的一個符號,給你寫個程序解釋一下吧,例如:
#include<stdio.h>
struct STU //定義一個結構體
{
int num;
}stu;
int main()
{
struct STU *p; //定義一個結構體指針
p=stu; //p指向stu這個結構體變量
stu.num=100; //給結構體成員num附個初值
printf("%d",p->num); //輸出stu中的num的值
return;
}
看到了吧,->的作法就是在引用結構體中的變量!!
形式如:p->結構體成員(如p->num)
他的作用相當於stu.num或(*p).num
不知道這樣解釋你明不明白、、、、、不懂了call我,O(∩_∩)O~
望采納。
 

C語言裡面,這個符號(->)是什,怎使用?

這是結構體指針中的一個符號,給你寫個程序解釋一下吧,例如:
#include<stdio.h>
struct STU //定義一個結構體
{
int num;
}stu;
int main()
{
struct STU *p; //定義一個結構體指針
p=stu; //p指向stu這個結構體變量
stu.num=100; //給結構體成員num附個初值
printf("%d",p->num); //輸出stu中的num的值
return;
}
看到了吧,->的作法就是在引用結構體中的變量!!
形式如:p->結構體成員(如p->num)
他的作用相當於stu.num或(*p).num
不知道這樣解釋你明不明白、、、、、不懂了call我,O(∩_∩)O~
望采納。
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved