Chúng ta có thể chỉ định một "bắt nguồn từ" hạn chế trên các thông số kiểu chung chung như thế này:Có một ràng buộc kiểu chung cho "nơi KHÔNG bắt nguồn từ" không?
class Bar<T> where T : IFooGenerator
Có cách nào để xác định KHÔNG có nguồn gốc từ đâu?
use-case của tôi: Tôi có một loạt các FooGenerator
s mà parallelizable, với mã song song tương tự cho mỗi, nhưng chúng tôi không muốn họ luôn được song song.
public class FooGenerator : IFooGenerator
{
public Foo GenerateFoo() { ... }
}
Vì vậy, tôi tạo ra một lớp chứa chung để tạo Foo song song:
public class ParallelFooGenerator<T> : IFooGenerator where T : IFooGenerator
{
public Foo GenerateFoo()
{
//Call T.GenerateFoo() a bunch in parallel
}
}
Vì tôi muốn FooGenerator
và ParallelFooGenerator<FooGenerator>
được hoán đổi cho nhau, tôi làm ParallelFooGenerator : IFooGenerator
. Tuy nhiên, tôi rõ ràng không muốn ParallelFooGenerator<ParallelFooGenerator>
hợp pháp.
Vì vậy, như một câu hỏi phụ trợ, có lẽ có cách nào tốt hơn để thiết kế điều này nếu những ràng buộc "không bắt nguồn từ" là không thể?
'ParallelFooGenerator 'đã là không thể, bởi vì' ParallelFooGenerator' là một kiểu generic và bạn đã không chỉ định một lập luận chung chung. Ví dụ, 'ParallelFooGenerator >' là có thể - và sẽ cho phép một kiểu như vậy thực sự là xấu? –
cdhowie
Không thể thực hiện được - các ràng buộc được phép: http://msdn.microsoft.com/en-us/library/d5x73970.aspx – Slugart
@cdhowie: Wow, derp, bạn nói đúng. Vâng, điều đó giải quyết vấn đề của tôi :) Nhưng câu hỏi vẫn có thể hữu ích cho người khác! –