我有一個通用類DirectorySource<T>
這取決於一個接口IDirectorySearch<T>
。泛型類型的構造函數約束或只是檢查我的泛型類型構造函數中的約束?
兩者都是仿製藥,並具有相同類型的約束:
public class DirectorySource<T> where T : IDirectoryEntry { }
public interface IDirectorySearcher<T> where T : IDirectoryEntry { }
所以,舉例來說,當我想要一個源操縱羣體,我會走這條路:
IDirectorySearcher<Group> groupSearcher = new GroupSearcher(ROOT, SCOPE);
IDirectorySource<Group> groups = new DirectorySource(groupSearcher);
我希望拿出來是強制,當我的泛型類型DirectorySource<T>
是DirectorySource<Group>
類型,我的搜索者是GroupSearcher
,我不想讓人能夠通過UserSearcher
,例如。
我看了下面的文章:
- C#: Generic types that have a constructor?;
- An Introduction to C# Generics;
- new Constraint (C# Reference)。
而且我似乎沒有得到如何處理這種與我的班級的約束。至於現在,我有以下幾點:
public class DirectorySource<T> where T : IDirectoryEntry {
public DirectorySource(IDirectorySearcher<T> searcher) {
Searcher = searcher;
}
public IDirectorySearcher<T> Searcher { get; private set; }
}
然後,我有過如下:
public class GroupSearcher : IDirectorySearcher<Group> {
public GroupSearcher(DirectoryEntry root, SearchScope scope) {
NativeSearcher = new DirectorySearcher();
NativeSearcher.SearchRoot = root;
NativeSearcher.SearchScope = scope;
}
// Implementing interface...
}
我不能隨便更換Searcher
屬性類型,因爲這會導致我的泛型類變成非通用的。
任何想法或東西我不明白這個構造函數約束我應該如何去完成我想要的東西?
編輯#1
我想這樣做的原因是因爲人們可以做到以下幾點:
IDirectorySearcher<User> userSearcher = new UserSearcher(ROOT, SCOPE);
IDirectorySource<Group> groups = new DirectorySource<Group>(userSearcher);
這似乎不正確,我...
1.我在這裏錯過了一些明顯的東西嗎? =)
在此先感謝!
你到底在問什麼? – SLaks 2010-07-13 20:22:12
@SLaks:用我的**編輯#1 **清楚嗎?否則,我會努力做到這一點。 – 2010-07-13 20:38:30