首先咱放個**,根據**來理解
using然後咱們在來個執行結果:system;
namespace
csharp
struct
struct
class
program
",myclass1.val);
console.writeline(""
,myclass2.val);
console.writeline(""
,struct1.val);
console.writeline(""
,struct2.val);
console.readkey(
true
); }}}
嘿嘿,這樣不就看出問題來了,(->_->)~~~~
來來,咱們來解釋一下:
這個程式包含了乙個結構型別struct和乙個類myclass,兩者都有乙個int型別欄位val。
在執行過程中兩者都是執行了這樣的操作:
1.宣告型別的變數;
2.在這個型別的變數中建立該型別的新例項;
3.宣告型別的第二個變數;
4.將第乙個變數賦給第二個變數;
5.在第乙個變數的例項中賦值val;
6.在第二個變數的例項中賦值val;
7.顯示兩個變數例項的val;
儘管對兩個型別的變數執行了相同的操作,但結果顯示是不同的,object型別的兩個變數值是一樣的,而結構型別的值卻是不一樣,為什麼造成這樣的結果呢?
物件是引用型別,在把物件賦給變數時,實際上是把帶有乙個指標的變數賦給了該指標所指向的物件,實際**中,指標是對記憶體的乙個位址,而位址是記憶體中該物件所在的位置,在用myclass myclass2=myclass1;時,實際上是複製了這個位址,這樣兩個變數就包含了同乙個物件的指標。
結構是值型別,其變數不是包含結構的指標,而是結構的本身,在用
struct struct2=struct1;時,實際上是把第乙個結構的資訊複製到第二個結構變數上。
好暈 暈 暈 暈 略略略~~~~
biubiubiu~~~
垃圾菜雞只能這樣啦~~~
關於string是值型別還是引用型別
當然了,string本質上肯定是引用型別,但是這個特殊的類卻表現出值型別的特點 判斷相等性時,是按照內容來判斷的,而不是位址 它肯定是乙個引用型別沒錯,兩個方面來看 1.class string繼承自object,而不是system.valuetype int32這樣的則是繼承於system.val...
關於string是值型別還是引用型別
當然了,string本質上肯定是引用型別,但是這個特殊的類卻表現出值型別的特點 判斷相等性時,是按照內容來判斷的,而不是位址 它肯定是乙個引用型別沒錯,兩個方面來看 1.class string繼承自object,而不是system.valuetype int32這樣的則是繼承於system.val...
String是值型別還是引用型別(C )
msdn 中明確指出 string 是引用型別而不是值型別,但 string 表面上用起來卻像是值型別,這又是什麼原因呢?首先從下面這個例子入手 值型別 int a 1 int b a a 2 console.writeline a is b is a,b 引用型別 string str1 ab s...