Sau khi tái cấu trúc một số mã gần đây, liên quan đến một số đổi tên lớp, một số mã của tôi đã phá vỡ một cách đáng ngạc nhiên. Nguyên nhân là một kiểm tra toán tử "is" không thành công, rằng tôi đã rất ngạc nhiên không phải là lỗi biên dịch hay cảnh báo.C# các lớp tĩnh và toán tử là
chương trình hoàn chỉnh này cho thấy tình hình:
static class ExtensionMethods {}
class Program {
static void Main() {
Test("Test");
}
public static bool Test(object obj)
{
return obj is ExtensionMethods;
}
}
tôi dự kiến sẽ có "obj là ExtensionMethods" để nâng cao một cảnh báo của một số loại, cho rằng ExtensionMethods là một lớp tĩnh.
Trình biên dịch sẽ đưa ra cảnh báo cho toán tử "is" khi đối tượng được thử nghiệm không bao giờ có thể thuộc loại được cung cấp, ví dụ ((string)obj) is System.Uri
.
Tôi có quên một trường hợp trong đó điều này thực sự sẽ là một thử nghiệm có ý nghĩa không?
FWIW, ReSharper sẽ khai thác điều này. –
Cho rằng 'đối tượng' được chuyển vào phương thức' Test' không thực sự chỉ định kiểu thời gian biên dịch, tôi không thấy trình biên dịch biết sự khác biệt như thế nào. –
@Robert, không phải lúc nào cũng sai vì không có gì có thể là một thể hiện của một lớp tĩnh? –