Khi nói chuyện với một đồng nghiệp về C#, anh ấy đã cho tôi xem một số mã C# mà tôi đã dự đoán đầu ra của. Điều này trông đơn giản ở nơi đầu tiên, nhưng nó đã không được. Tôi không thể hiểu tại sao C# lại hành động theo cách này.hiểu các lớp chung chung lồng nhau trong C# với bài kiểm tra
Mã:
public class A<T1>
{
public T1 a;
public class B<T2> : A<T2>
{
public T1 b;
public class C<T3> : B<T3>
{
public T1 c;
}
}
}
class Program
{
static void Main(string[] args)
{
A<int>.B<char>.C<bool> o = new A<int>.B<char>.C<bool>();
Console.WriteLine(o.a.GetType());
Console.WriteLine(o.b.GetType());
Console.WriteLine(o.c.GetType());
Console.ReadKey();
}
}
Đầu ra là:
System.Boolean
System.Char
System.Int32
Đúng tôi nếu tôi sai, nhưng tôi hiểu rằng o.a
là loại bool vì C<T3>
thừa hưởng từ B<T3>
và B<T2>
kế thừa từ A<T2>
. Và tôi cũng có thể hiểu một chút rằng o.c
thuộc loại int vì loại c
là T1
mà nó lấy từ lớp ngoài (tôi nghĩ).
Đầu của tôi gần như bùng nổ khi tôi cố gắng tìm ra lý do tại sao o.b
thuộc loại char. Ai đó có thể giải thích điều này với tôi?
Tôi rất vui vì tôi không duy trì mã tại công ty của bạn. – Default
Thú vị, nhưng tổng số quá mức cần thiết cho bất cứ điều gì thực tế. Im giả định đây là học tập hơn là cho công việc? – JGilmartin
@Default Tại sao? Bởi vì họ thích hỏi nhau về mã C# lạ? – Erix