public abstract class EntityBase { ... }
public interface IFoobar
{
void Foo<T>(int x)
where T : EntityBase, new();
}
public interface IFoobar<T>
where T : EntityBase, new()
{
void Foo(int x);
}
public class Foobar<T> : IFoobar, IFoobar<T>
where T : EntityBase, new()
{
public void Foo(int x) { ... }
void IFoobar.Foo<T>(int x) { Foo(x); }
}
tôi nhận được một cảnh báo trình biên dịch: Type parameter 'T' has the same name as the type parameter from outer type '...'
Loại tham số 'T' có cùng tên với tham số kiểu từ loại ngoài '...'
tôi đã cố gắng thực hiện: void IFoobar.Foo<U>(int x) { Foo(x); }
, tuy nhiên sau đó tôi không thể đảm bảo rằng U và T là như nhau. Cách mà lớp Foobar được triển khai, điều rất quan trọng là chúng giống nhau.
Tôi cũng đã thử: void IFoobar.Foo<U>(int x) where U : T { Foo(x); }
, tuy nhiên điều đó không đảm bảo rằng U và T bằng nhau và nó không cho phép tôi xác định lại ràng buộc vì nó đã được xác định trên giao diện.
Bạn đang cố gắng làm gì? Tại sao bạn định nghĩa lại T nếu nó được chỉ định trong lớp? Nếu bạn có nhu cầu xác định nó thì nó phải tách biệt nếu không T đã được lớp đó chỉ rõ. Nếu bạn muốn giải quyết điều này, hãy đặt T trên giao diện nếu bạn có thể. Đó là những gì tôi đã làm khi tôi thấy mình sao chép thông số kỹ thuật loại. –