Tại sao ném ngoại lệ trong kết quả của hàm tạo trong tham chiếu null? Ví dụ, nếu chúng ta chạy các mã bên dưới giá trị của giáo viên là null, trong khi st.teacher thì không (đối tượng Teacher được tạo ra). Tại sao?Tại sao ném ngoại lệ trong kết quả của hàm tạo trong tham chiếu null?
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Test();
}
private static void Test()
{
Teacher teacher = null;
Student st = new Student();
try
{
teacher = new Teacher("", st);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
Console.WriteLine((teacher == null)); // output True
Console.WriteLine((st.teacher == null)); // output False
}
}
class Teacher
{
public string name;
public Teacher(string name, Student student)
{
student.teacher = this;
if (name.Length < 5)
throw new ArgumentException("Name must be at least 5 characters long.");
}
}
class Student
{
public Teacher teacher;
}
}
cảm ơn vì lời giải thích tuyệt vời, tôi đã chỉnh sửa "đối tượng rỗng" trong câu hỏi thành "tham chiếu null". –
Giải thích tuyệt vời, bạn cũng chỉ chứng minh rằng không phải đối tượng khởi tạo trong C# luôn giữ «null». Tôi bắt đầu nghi ngờ trong đó vì khi tôi cố gắng sử dụng trong Visual Studio một đối tượng có thể được uninitialized trong một điều kiện nhất định, nhưng dù sao nó đã được kiểm tra kiểm tra cho «null», và tiếp theo được sử dụng, trình biên dịch hiển thị một lỗi về uninitialized biến. Sau khi tôi khởi tạo một cách rõ ràng đối tượng bằng «null», lỗi đã biến mất. Nhờ bạn, bây giờ tôi biết rằng nó chỉ là một lỗi của Visual Studio. –
@ Hi-Angel: Không, nó không phải là một lỗi. Đó là sự khác biệt giữa một trường * và một biến cục bộ. Một trường có giá trị mặc định và có thể được sử dụng mà không bao giờ được đặt - biến cục bộ * không thể * được đọc cho đến khi được gán chắc chắn. –