Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.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# Prism实现中的接口重要性_C#_Wpf_Mvvm_Prism - Fatal编程技术网

C# Prism实现中的接口重要性

C# Prism实现中的接口重要性,c#,wpf,mvvm,prism,C#,Wpf,Mvvm,Prism,是否有必要在模块级实现接口,并在prism应用程序中使用viewmodel 我没有看到任何可用于多类的接口。不,prism中的视图模型不需要实现任何接口。如果没有任何数据从逻辑端而不是从视图中更改,则即使是INotifyPropertyChanged 在较旧的版本中,视图必须实现IView才能使用ViewModelLocator,但这已经不存在了 模块定义需要实现IModule 评论后编辑: 如果希望能够在生产或测试中用另一个类替换单个类,则需要为该类创建接口 也就是说,您通常不会为类创建接口,

是否有必要在模块级实现接口,并在prism应用程序中使用viewmodel


我没有看到任何可用于多类的接口。

不,prism中的视图模型不需要实现任何接口。如果没有任何数据从逻辑端而不是从视图中更改,则即使是
INotifyPropertyChanged

在较旧的版本中,视图必须实现
IView
才能使用
ViewModelLocator
,但这已经不存在了

模块定义需要实现
IModule

评论后编辑:

如果希望能够在生产或测试中用另一个类替换单个类,则需要为该类创建接口

也就是说,您通常不会为类创建接口,而是相反。接口首先指定使用者希望对实现执行的操作,然后一个或多个类分别为一个或多个接口提供实现

例如:

在课堂上

internal class InventoryManager
{
    public IEnumerable<string> ListItems() { ... }

    public void AddItem( string item ) { ... }

    public void RemoveItem( string item ) { ... }
}
内部类清单管理器
{
公共IEnumerable ListItems(){…}
公共无效附加项(字符串项){…}
public void removietem(字符串项){…}
}
您不创建此接口:

public interface IInventoryManager
{
    IEnumerable<string> ListItems();

    void AddItem( string item );

    void RemoveItem( string item );
}
公共接口IInventoryManager
{
IEnumerable ListItems();
无效附加项(字符串项);
无效删除项(字符串项);
}
而是这两个:

public interface IItemList
{
    IEnumerable<string> ListItems();
}

public interface IItemStorage
{
    void AddItem( string item );

    void RemoveItem( string item );
}
公共接口项目列表
{
IEnumerable ListItems();
}
公共接口IItemStorage
{
无效附加项(字符串项);
无效删除项(字符串项);
}

因为您的界面的使用者可能想要查看清单中的内容,或者对其进行更改。而且您希望选项实现只读资源清册而不是可写资源清册。

感谢您的回答,是的,Viewmodel将继承实现INotifyPropertyChanged接口的viewmodelbase类。为了在prism中实现模块,我们必须实现I模块。我的主要问题是,是否没有一个以上的类可以实现相同的接口。在这种情况下,最好只为一个类创建接口。如果我们不这样做,那么我们就失去了松散耦合的概念。我不明白。可以有无限数量的类实现单个接口,但也只能有一个。大多数情况下,您至少有两个:一个在生产代码中,一个在单元测试中。是的,我想知道。。Ii仅为单个类创建接口是一种良好的做法。