C# 泛型语法

C# 泛型语法,c#,generics,C#,Generics,这里有一些代码,我似乎无法理解它是如何工作的。我知道它使用的是泛型,但是where子句中的“new”是什么意思 public class MediaPresenter<T> where T : Media, new() { public MediaPresenter(string mediaPath, params string[] extensions) { _mediaPath = mediaPath; _fileExten

这里有一些代码,我似乎无法理解它是如何工作的。我知道它使用的是泛型,但是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);
            }
        }
    }
}
公共类MediaPresenter
其中T:Media,new()
{
公共MediaPresenter(字符串mediaPath,参数字符串[]扩展名)
{
_mediaPath=mediaPath;
_fileExtensions=extensions;
}
私有void LoadMedia()
{
if(string.IsNullOrEmpty(_mediaPath))返回;
_媒体=新的ObservableCollection();
DirectoryInfo DirectoryInfo=新的DirectoryInfo(_mediaPath);
foreach(文件扩展名中的字符串扩展名)
{
FileInfo[]pictureFiles=directoryInfo.GetFiles(
扩展,
SearchOption.AllDirectories
);
foreach(图片文件中的FileInfo FileInfo)
{
如果(_media.Count==50)中断;
T媒体=新的T();
media.SetFile(fileInfo);
_媒体。添加(媒体);
}
}
}
}
我也不明白在LoadMedia方法中如何使用t?不能在类中的任何位置引用该对象吗

new()表示T需要一个无参数构造函数。(在这种情况下,它还需要继承媒体类)

这里有一些代码,我似乎无法理解它是如何工作的。我知道它使用的是泛型,但是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);
            }
        }
    }
}
where子句中的new()表示T必须是可以实例化的类型。如果T没有无参数构造函数,则T不是作为类型参数传递给此类的有效类型

我也不明白在LoadMedia方法中如何使用t?不能在类中的任何位置引用该对象吗


对。T是类的类型参数,因此整个类都知道它。例如,在类中有一个类型为T的字段或返回T的方法也是有效的。

T是实例化该类时使用的特定类型。例如,如果你要申报

MediaPresenter<Media> myMediaPresenter = new MediaPresenter<Media>();
因为当我们在上面声明类时,我们使泛型类型参数等于Media

希望有帮助