Tại sao tôi không được phép có phương pháp tĩnh và không tĩnh với cùng một chữ ký?Cuộc gọi không rõ ràng giữa các phương pháp hoặc thuộc tính sau đây (một tĩnh và một không tĩnh)
Hãy nói rằng tôi có một lớp học như thế này
public class TestClass
{
public object thing { get; set; }
public TestClass()
{
}
public TestClass(object thing)
{
this.thing = thing;
}
public static TestClass ConvertTestClass(object thing)
{
return new TestClass(thing);
}
public TestClass ConvertTestClass(object thing)
{
this.thing = thing;
return this;
}
}
và tôi cố gắng sử dụng nó như thế này
public class SomeOtherClass
{
public SomeOtherClass()
{
TestClass tc = TestClass.ConvertTestClass(new object());
TestClass tc2 = new TestClass();
tc2.ConvertTestClass(new object());
}
}
tôi nhận được các lỗi sau đây trên TestClass.ConvertTestClass(new object());
Cuộc gọi là không rõ ràng giữa các phương thức hoặc thuộc tính sau: 'TestClass.ConvertTestClass (đối tượng)' và 'TestClass.ConvertTestClass (đối tượng)'
và các lỗi trên tc2.ConvertTestClass(new object());
Cuộc gọi là mơ hồ giữa các phương thức hoặc thuộc tính sau: 'TestClass.ConvertTestClass (object)' và 'TestClass.ConvertTestClass (object)'
Thành viên 'TestClass.ConvertTestClass (đối tượng)' không thể được truy cập với một tham chiếu cá thể; hội đủ điều kiện với tên loại thay thế
Trình biên dịch có thực sự không cho biết sự khác biệt giữa các phiên bản tĩnh và không tĩnh của phương pháp đó hay tôi thiếu gì đó ở đây?
Tôi không sử dụng ReSharper (dường như là gốc của một vấn đề tương tự trong các câu hỏi khác).
Bạn mong đợi điều gì sẽ được gọi với chỉ 'ConvertTestClass (đối tượng mới())' từ bên trong 'TestClass'? ;) Nhưng cuối cùng nó có lẽ là một quyết định thiết kế vì lợi ích của sự rõ ràng. – Marvin
@Marvin chắc chắn sẽ mơ hồ. Nhưng, sẽ không nói hoặc 'this.ConvertTestClass' hoặc' TestClass.ConvertTestClass' giải quyết sự mơ hồ? Đôi khi chúng tôi được yêu cầu làm điều đó làm rõ về trình biên dịch ('System.Windows.Shapes.Path' /' System.IO.Path') – Brad
Hãy xem [answer] này (http://stackoverflow.com)/a/6033530/3052062) bởi Jon Skeet – chomba