C\#포장 과 분해 깊이 이해(정리 편)
포장 과 뜯 기 는 값 형식 과 인용 형식 간 의 상호 전환 이 실 행 될 작업 입 니 다.
1. 포장 은 값 형식 에서 인용 형식 으로 전환 할 때 발생 합 니 다.
2. 상 자 를 뜯 는 것 은 참조 형식 에서 값 형식 으로 전환 할 때 발생 합 니 다.
//1、
//
//2、
// ;
// , Object , //
// :
int val = 100;
object obj = val;
Console.WriteLine (“ = {0}", obj);
// ,
int val = 100;
object obj = val;
int num = (int) obj;
Console.WriteLine ("num: {0}", num);
// , ,
// :
//3、
// .NET , ( C++ ) , , // , , , : 。
// 。
// 。
// 。
//4: / ?
// : 。 object // 。
// : object 。
//5: ?( ?)
// , Object , Object // , 。 ( Int32) , 。
// , , , //Object。 , , 。
//6: / 。
// :
// , 。 。
// : ( //SyncBlockIndex)。
// : 。
// : 。 。
// : Int32 , , Int32。 // , , , Int32 //( )。
// :
// , 。 。
// , , // 。 。 , // , , IL , , , GetType // ( )。
//7: /
// , , , , , // 。
// ?
// , 。
// 2 , , , 。 // , 。
// , , , , // 。
// / , C# , , // , IL 。 : // , 。
//8: /
// / , : , , // , ?
// 。
// 。
Struct A : ICloneable
{
public Int32 x;
public override String ToString() {
return String.Format(”{0}”,x);
}
public object Clone() {
return MemberwiseClone();
}
}
static void main()
{
A a;
a.x = 100;
Console.WriteLine(a.ToString());
Console.WriteLine(a.GetType());
A a2 = (A)a.Clone();
ICloneable c = a2;
Ojbect o = c.Clone();
}
//5.0:a.ToString()。 A ToString , ToString // 。 A , 。 , , 。//( :ToString A System.ValueType )
//5.1:a.GetType(),GetType System.ValueType , ,// , a , , //System.ValueType。( , System.ValueType // )。
//5.2:a.Clone(), A Clone , 。
//5.3:ICloneable : a2 , , // 。
//5.4:c.Clone()。 , 。
// : , , , // 。 , 。 , // , C++ , // 。
//9:
// , , , , // , , 。 , 。 // :( change )
public void Change(Int32 x) {
this.x = x;
}
// :
A a = new A();
a.x = 100;
Object o = a; // o, , o 。
((A)o).Change(200); // ? 。
// o , A, , A , // 。
//( : C++ , , , C#// 。)
// ?
// , , 。
// :
interface IChange {
void Change(Int32 x);
}
struct A : IChange {
…
}
// :
((IChange)o).Change(200);// ? 。
// ?
// o IChange , , , o // , IChange , Change, , // , 。
//10、--------------------------
// , (boxing):
//1、 。
//2、 。
//3、 。
// , 。
// , (unboxing):
//1、 , 。
//2、 。
// 2 , boxing 。 , , // boxing 。
//11、-------------------------
//NET System.Object , :int, //byte, short,bool , 。 // (HEAP) , !( // !)
//.NET ? (value) //(regerencetype),C# (Sbyte、Byte、Short、//Ushort、Int、Uint、Long、Ulong、Char、Float、Double、Bool、//Decimal)、 (enum)、 (struct), : 、 、 、 、// 。
// , , NULL;
// , null, GARBAGE COLLECTION // , , , !
// !
// 。 :
int i=0;
Syste.Object obj=i;
// ! i !
// ! :
int i=0;
System.Object obj=i;
int j=(int)obj;
// 2 i , obj !1、
총결산위 에서 말 한 것 은 편집장 이 여러분 에 게 소개 한 C\#포장 과 개봉(정리 편)입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.편집장 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.