Nếu trái không xác định mỗi class
định nghĩa ngầm sẽ kế thừa từ System.Object
do đó hai định nghĩa là tương đương.
Thời gian duy nhất này sẽ khác nhau nếu ai đó thực sự xác định loại Object
khác trong cùng một không gian tên. Trong trường hợp này định nghĩa địa phương của Object
sẽ được ưu tiên và thay đổi các đối tượng thừa kế
namespace Example {
class Object { }
class C : Object { }
}
Rất nhiều trường hợp góc nhưng sẽ không chỉ nó ra nếu tôi không nhìn thấy nó trước khi
Lưu ý rằng điều này cũng không đúng nếu bạn sử dụng object
thay vì Object
. Từ khóa C# object
là bí danh loại cho System.Object
và do đó nó sẽ không khớp với Example.Object
.
namespace Example2 {
class Object { }
class C : Object { } // Uses Example.Object
class D : object { } // Uses System.Object
}
Tất nhiên nếu bạn có một nhà phát triển thực sự ác bạn vẫn có thể gây nhầm lẫn với object
namespace System {
class Object {
private Object() { }
}
}
namespace Example3 {
// This will properly fail to compile since it can't bind to the private
// Object constructor. This demonstrates that we are using our definition
// of Object instead of mscorlib's
class C : object { } // Uses our System.Object
}
Bất kỳ định nghĩa lớp nào không chỉ định rõ ràng một lớp cơ sở sẽ thừa kế từ 'đối tượng'. –