以下是一些我似乎无法理解其工作原理的代码。我知道它使用的是泛型,但where子句中的“new”是什么意思?
public class MediaPresenter<T>
where T : Media, new()
{
public MediaPresenter(string mediaPath, params string[] extensions)
{
_mediaPath = mediaPath;
_fileExtensions = extensions;
}
private void LoadMedia()
{
if(string.IsNullOrEmpty(_mediaPath)) return;
_media = new ObservableCollection<Media>();
DirectoryInfo directoryInfo = new DirectoryInfo(_mediaPath);
foreach(string extension in _fileExtensions)
{
FileInfo[] pictureFiles = directoryInfo.GetFiles(
extension,
SearchOption.AllDirectories
);
foreach(FileInfo fileInfo in pictureFiles)
{
if(_media.Count == 50) break;
T media = new T();
media.SetFile(fileInfo);
_media.Add(media);
}
}
}
}
我还不了解LoadMedia方法中如何使用T? T可以在课堂的任何地方被引用吗?
答案 0 :(得分:7)
以下是一些我似乎无法理解其工作原理的代码。我知道它使用的是泛型,但where子句中的“new”是什么意思?
where子句中的new()意味着T必须是可以实例化的类型。如果T没有无参数构造函数,则T不是作为类型参数传递给此类的有效类型。
请参阅http://msdn.microsoft.com/en-us/library/sd2w2ew5.aspx。
我还不了解LoadMedia方法中如何使用T? T可以在课堂的任何地方被引用吗?
是。 T是类的类型参数,因此整个类都知道它。例如,在类中具有类型T的字段或返回T的方法也是有效的。
答案 1 :(得分:1)
new()意味着T需要一个无参数构造函数。 (在这种情况下,它还需要继承Media类)
答案 2 :(得分:0)
T是实例化此类时使用的特定类型。例如,如果您要声明
MediaPresenter<Media> myMediaPresenter = new MediaPresenter<Media>();
然后T将成为媒体,您查询的行将在运行时转换为类似
的内容Media media = new Media();
因为当我们声明上面的类时,我们使泛型类型参数等于Media。
希望有所帮助