?? 7-8.cs
字號:
//程序7-8
using System;
class Reftest { public int testInt; }
class Student
{
public int studID;
public string studName;
public Reftest Ref1;
}
class CollegeStudent: Student
{
public int DepartmentID;
// Main方法只有定義在派生類中才能直接調用MemberwiseClone方法。
public static void Main()
{
CollegeStudent S1 = new CollegeStudent();
S1.studID = 2003179;
S1.studName = "Sam";
S1.DepartmentID=001;
S1.Ref1 = new Reftest();
S1.Ref1.testInt = 333;
// 淺表副本創建與原始對象具有相同類型的新實例,然后復制原始對象的非靜態字段。
// 如果字段是值類型的,則對該字段執行逐位復制。
// 如果字段是引用類型,則復制該引用但不復制被引用的對象;
// 這樣,原始對象中的引用和副本中的引用指向同一個對象。
// 相反,對象的深層副本復制對象中字段直接或間接引用的全部內容。
// Performs a shallow copy of m1 and assign it to m2.
CollegeStudent S2 = (CollegeStudent)S1.MemberwiseClone();
Console.WriteLine(S1.studID+" "+S1.studName+" "+S1.DepartmentID+" "+S1.Ref1.testInt);
Console.WriteLine(S2.studID+" "+S2.studName+" "+S2.DepartmentID+" "+S2.Ref1.testInt);
// 兩個對象本身
Console.WriteLine(Object.ReferenceEquals(S1,S2)); // false
Console.WriteLine(Object.Equals(S1,S2)); // false
// 兩個對象數據成員中的值類型
Console.WriteLine(Object.ReferenceEquals(S1.studID,S2.studID)); // false
Console.WriteLine(Object.Equals(S1.studID,S2.studID)); // true
// 兩個對象數據成員中的引用類型
Console.WriteLine(Object.ReferenceEquals(S1.studName,S2.studName)); // true
Console.WriteLine(Object.Equals(S1.studName,S2.studName)); // true
Console.WriteLine(Object.ReferenceEquals(S1.Ref1,S2.Ref1)); // true
Console.WriteLine(Object.Equals(S1.Ref1,S2.Ref1)); // true
Console.WriteLine("===================");
S1.studName="Bush";
// S1.studName="Sam"; // string類型是一個特殊的引用類型,只要字符串內容相同,則引用和值均相等
S1.DepartmentID=002;
S1.Ref1.testInt = 444;
S1.studID = 2003180;
Console.WriteLine(S1.studID+" "+S1.studName+" "+S1.DepartmentID+" "+S1.Ref1.testInt);
Console.WriteLine(S2.studID+" "+S2.studName+" "+S2.DepartmentID+" "+S2.Ref1.testInt);
// 兩個對象數據成員中的值類型
Console.WriteLine(Object.ReferenceEquals(S1.studID,S2.studID)); // false
Console.WriteLine(Object.Equals(S1.studID,S2.studID)); // true
// 兩個對象數據成員中的引用類型
Console.WriteLine(Object.ReferenceEquals(S1.studName,S2.studName)); // false
Console.WriteLine(Object.Equals(S1.studName,S2.studName)); // false
Console.WriteLine(Object.ReferenceEquals(S1.Ref1,S2.Ref1)); // true
Console.WriteLine(Object.Equals(S1.Ref1,S2.Ref1)); // true
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -