⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 7-8.cs

📁 java基础方面的一些实例代码
💻 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 + -