Có thể một số người vui lòng giải thích, Điều gì xảy ra khi loại tham chiếu được xác định bên trong loại giá trị. tôi viết đoạn mã sau:Cấu trúc bên trong lớp học
namespace ClassInsideStruct
{
class ClassInsideStruct
{
static void Main(string[] args)
{
ValueType ObjVal = new ValueType(10);
ObjVal.Display();
ValueType.ReferenceType ObjValRef = new ValueType.ReferenceType(10);
ObjValRef.Display();
Test(ObjVal, ObjValRef);
ObjVal.Display();
ObjValRef.Display();
Console.ReadKey();
}
private static void Test(ValueType v, ValueType.ReferenceType r)
{
v.SValue = 50;
r.RValue = 50;
}
}
struct ValueType
{
int StructNum;
ReferenceType ObjRef;
public ValueType(int i)
{
StructNum = i;
ObjRef = new ReferenceType(i);
}
public int SValue
{
get { return StructNum; }
set
{
StructNum = value;
ObjRef.RValue = value;
}
}
public void Display()
{
Console.WriteLine("ValueType: " + StructNum);
Console.Write("ReferenceType Inside ValueType Instance: ");
ObjRef.Display();
}
public class ReferenceType
{
int ClassNum;
public ReferenceType(int i)
{
ClassNum = i;
}
public void Display()
{
Console.WriteLine("Reference Type: " + ClassNum);
}
public int RValue
{
get { return ClassNum; }
set { ClassNum = value; }
}
}
}
}
Những kết quả đầu ra:
ValueType: 10 ReferenceType Inside ValueType Instance: Reference Type: 10 Reference Type: 10 ValueType: 10 ReferenceType Inside ValueType Instance: Reference Type: 50 Reference Type: 50
Tôi tò mò muốn biết, sau khi gọi phương thức Test(ObjVal, ObjValRef)
, làm thế nào các giá trị của ReferenceType
được thay đổi thành 50 mà nằm bên trong ValueType
có giá trị nào không thay đổi?
Vị trí của lớp đối với cấu trúc không liên quan. Nó chỉ là một kiểu lồng nhau (và trong C# - không giống như nói Java hoặc Scala - nó là * không * phụ thuộc vào kiểu kèm theo). Đó là cùng ngữ nghĩa như thể 'ReferenceType' là * không * lồng nhau. Đừng nhầm lẫn giữa các loại và các biến với một kiểu nhất định và các đối tượng được tạo ra của một kiểu đã cho. –