第一、引用類型和值類型
類屬於引用類型,而結構屬於值類型。
結構在賦值時進行復制。 將結構賦值給新變量時,將復制所有數據,並且對新副本所做的任何修改不會更改原始副本的數據。
第二、繼承性
類可以繼承類或者實現接口,而結構只能實現接口,不能繼承結構。
第三、實例化
類的實例化需要使用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創建結構對象時需要注意,在初始化所有字段之前,字段將保持未賦值狀態,同時對象不可用。也就是說,在結構對象包含的所有字段(包含私有的、公有的、隱藏的(自動實現的屬性在運行時生成的))初始化之前,該結構對象中的方法或者屬性都不可以調用。
③當結構包含引用類型作為成員時,必須顯式調用該成員的默認構造函數,否則該成員將保持未賦值狀態且該結構不可用。
這是結構體指針中的一個符號,給你寫個程序解釋一下吧,例如:
#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~
望采納。
這是結構體指針中的一個符號,給你寫個程序解釋一下吧,例如:
#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~
望采納。