Trong khi cố gắng tìm hiểu Unity, tôi tiếp tục nhìn thấy đoạn mã sau cho trọng GetControllerInstance
trong MVC:Sử dụng IsAssignableFrom và "là" từ khóa trong C#
if(!typeof(IController).IsAssignableFrom(controllerType)) { ... }
này dường như với tôi một cách khá phức tạp của cơ bản viết
if(controllerType is IController) { ... }
tôi đánh giá cao có sự khác biệt tinh tế giữa is
và IsAssignableFrom
, tức là IsAssignableFrom
không bao gồm chuyển đổi diễn viên, nhưng tôi đang gặp khó khăn để hiểu được ý nghĩa của differenc này e trong các tình huống thực tế.
Khi nào bạn nên chọn IsAssignableFrom
hơn is
? Điều gì sẽ khác biệt trong GetControllerExample
?
if (!typeof(IController).IsAssignableFrom(controllerType))
throw new ArgumentException(...);
return _container.Resolve(controllerType) as IController;
Ah ok sự khác biệt là hiển nhiên bây giờ. Tôi nên phát hiện ra điều đó! – fearofawhackplanet
Vì vậy, tôi đoán là nếu 'T' và' U' là loại chung thì 'typeof (T) .IsAssignableFrom (typeof (U))' có giống 'new T() là U' không? – orad
Không, nhưng nó sẽ giống với 'new U() là T'. T sẽ là loại cơ sở. Tôi luôn bị vấp ngã bởi điều đó. Tôi chỉ nhớ rằng 'IsAssignableFrom' đối diện với toán tử' is'. – Jordan