Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF在视图中或在单独的类中继承接口_C#_Wpf_Inheritance - Fatal编程技术网

C# WPF在视图中或在单独的类中继承接口

C# WPF在视图中或在单独的类中继承接口,c#,wpf,inheritance,C#,Wpf,Inheritance,我正在制作一个媒体播放器程序,我有以下界面: public interface IMediaService { void Play(); } 在MediaElement控件所在的视图中继承接口,并在方法的实现中直接访问它,或者将其放在一个单独的类中,这样更合适: public class MediaPlayer : IMediaService { private MediaElement _mediaElement; public MediaPlayer(MediaEl

我正在制作一个媒体播放器程序,我有以下界面:

public interface IMediaService
{
    void Play();
}
MediaElement
控件所在的视图中继承接口,并在方法的实现中直接访问它,或者将其放在一个单独的类中,这样更合适:

public class MediaPlayer : IMediaService
{
    private MediaElement _mediaElement;
    public MediaPlayer(MediaElement mediaElement)
    {
        _mediaElement = mediaElement;
    }

    public void Play()
    {
        _mediaElement.Play();
        //...
    }
}
vs在视图中继承它:

public partial class MainWindow : IMediaService
{
    public MainWindow()
    {
        InitializeComponent();
    }

    void IMediaService.Play()
    {
        Player.Play();
        //..
    }
}
我没有使用MVVM,但是这些方法可以通过命令作为绑定使用

我在第二种方法中看到的问题是,我的视图类很快就会变得混乱

我愿意接受我没有提到的任何替代方案,这正是我提出的

在MediaElement控件所在的视图中继承接口并在方法的实现中直接访问它更合适吗,还是将其放在一个单独的类中更合适,如下所示:

public class MediaPlayer : IMediaService
{
    private MediaElement _mediaElement;
    public MediaPlayer(MediaElement mediaElement)
    {
        _mediaElement = mediaElement;
    }

    public void Play()
    {
        _mediaElement.Play();
        //...
    }
}
就MVVM而言,这并不重要。真的没有对错之分。这取决于开发者的个人偏好。如果不想污染视图,可以创建一个单独的类。如果您不介意在视图中添加一些方法,那么您不介意

使用单独类的好处是,您可以将其重新用于多个不同的视图/
MediaElement


但是视图模型只关心接口本身,也就是说,它不依赖于接口的实际实现。

最好使用第一种方法,因为您不应该将处理媒体播放器的责任添加到主窗口。分开保存很好。“我没有使用MVVM”--我很困惑你不会在WPF中使用适当的习惯用法,但是我认为堆栈溢出用户关于你让哪个类实现接口的意见甚至很重要。@PeterDuniho我不明白你评论的重点。如果你来这里只是为了吃点东西,请传过去。@PeterDuniho说得很有道理。问题是您使用该界面的目的是什么?您创建接口仅仅是为了拥有一个接口,还是在传递它?你要把它送到哪里?