này có thể có một lời giải thích đơn giản tôi không nhìn thấy, nhưng tại sao lại là đoạn mã sau quy phạm pháp luật:const lĩnh vực năng động so với bất kỳ hành vi const trường chuẩn cũ
public struct Foo
{
const object nullObject = null;
public override string ToString()
{
if (nullObject == null)
{
return base.ToString();
}
}
}
Trong khi những điều sau đây,
public struct Foo
{
const dynamic nullObject = null;
public override string ToString()
{
if (nullObject == null)
{
return base.ToString();
}
}
}
cung cấp lỗi thời gian biên dịch sau: Foo.ToString() ': không phải tất cả các đường dẫn mã đều trả về giá trị?
Tại sao thực tế là nullObject
là dynamic
làm cho trình biên dịch không thể khẳng định rằng nullObject
sẽ luôn là null
?
EDIT: Mở rộng trên các câu hỏi, và dựa trên smoore's câu trả lời, tại sao các trình biên dịch cho phép dynamic
const
trường để bắt đầu với? Không phải là nó tự đánh bại sao? Tôi biết kịch bản này không có ứng dụng thực sự nào cả và nó thẳng thắn khá vô nghĩa nhưng tôi tình cờ gặp nó bởi tai nạn tuyệt đối và chỉ tò mò thôi.
'tại sao trình biên dịch cho phép các trường const động bắt đầu bằng?' Bởi vì về mặt kỹ thuật nó cho phép 'const' được áp dụng cho bất kỳ loại trường nào. Như với bất kỳ tính năng nào, câu hỏi không phải là "tại sao họ không thực hiện tính năng này mà tôi muốn?" đó là "tại sao họ nên thực hiện tính năng này mà tôi muốn?" Trong trường hợp này, đối tượng địa lý sẽ cấm một trường 'const' từ' động'. Như với hầu hết các yêu cầu tính năng, câu trả lời sẽ rất có thể là "nó không đáng để dành thời gian và công sức, có thêm nhiều tính năng quan trọng cần thêm". Điều này là khá ra khỏi con đường của bạn để bắn mình vào chân. – Servy