【c#接口】教程文章相关的互联网学习教程文章

c# – 按接口动态创建类【代码】

当我能够动态生成方法时,我对.Net表达有一些了解.没关系,这很好. 但现在我需要生成一个完整的类,似乎唯一的方法就是Emit整个IL,这是完全不可接受的(它是不可能支持的). 假设我们有以下界面:public interface IFoo {[Description("5")]int Bar();[Description("true")]bool Baz(); }应转换为:public class Foo : IFoo {public int Bar() => 5;public bool Baz() => true; }我怎样才能实现它?没有第三方工具和库,它甚至可能吗?我...

c# – 我应该将存储库接口与域模型分离【代码】

假设我有一些需要一些IEnumerable< Foo>的DDD服务.执行一些计算.我想出了两个设计: >使用IFooRepository接口抽象数据访问,这是非常典型的public class FooService {private readonly IFooRepository _fooRepository;public FooService(IFooRepository fooRepository)=> _fooRepository = fooRepository;public int Calculate(){var fooModels = _fooRepository.GetAll();return fooModels.Sum(f => f.Bar);} }>不要依赖IFooReposi...

C#3中具有接口继承(co(ntra) – 方差?)的通用类型推断【代码】

我有以下两种通用类型:interface IRange<T> where T : IComparable<T> interface IRange<T, TData> : IRange<T> where T : IComparable<T>^---------^|+- note: inherits from IRange<T>现在我想为这些接口的集合定义扩展方法,因为它们都是IRange< T>或者来自IRange< T>我希望我能定义一个可以处理两者的方法.注意,该方法不需要处理两者之间的任何差异,只需要处理来自IRange< T>的公共部分. 我的问题是这样的: 我可以定义一个扩展...

c# – 创建一个动态实现接口的类

我正在尝试编写一个代码,允许用户加载程序集(DLL文件),在所述程序集中选择一个接口,而不是生成一个继承该接口的类,并使用所有必需方法的存根. 该类将生成到文件或活动VS会话中(该代码旨在用于在通过自定义模板创建项目期间初始化的IWizard中). 我得到了接口的Type对象,但我很难想到下一部分,我已经考虑在循环中运行接口的方法并将它们复制到文本文件中,添加在适当的地方实现存根,但我很确定有一些更好的方法,也许通过第三方工具? ...

在C#中为其他人提供接口定义的最佳方法是什么?

这让我觉得很可能有一个商定的最佳实践答案,但我似乎无法在任何地方找到它. 我有一个应用程序,将加载和使用实现特定接口的类.实现类将由其他人编写,我希望将它们发送到成功实现接口所需的最小值. 到目前为止,我提出的最好的是以下内容: 应用程序解决方案包含:一个只包含接口定义并编译为dll的项目.应用程序的项目,它使用接口并引用dll. 一个单独的解决方案,用于构建到dll并引用接口dll的示例实现. 这是最好的方法吗?即,将编译版...

c# – 如何在强类型的接口上引用方法名称【代码】

很抱歉,如果已经回答了这个问题,但我认为我实际上缺乏正式的教育来正确地提出这个问题,因此也没有正确的标准来成功地搜索它. 我有一个API,有几个调用几乎相同的东西,但使用不同的方法作用于不同的输入对象,但总是形成相同的接口.我想采取削减&从API方法调用进程中粘贴方面,以便公共代码在所有方法调用中完成相同的操作.我已经设法使用泛型为输入和输出对象获得一个有效的解决方案,并且正在引用要从字符串调用的方法名称.我想引用强...

c# – 什么是更好的 – 调用空方法或使用许多接口【代码】

我有一些类有一个名为Tool的基类.在表单中,我有一个工具引用,其中包含所提到的类的一个实例.当表单上发生MouseDown事件时,我调用当前的工具方法ex. “CurrentTool.MethodWhenMouseDown()”. 大多数工具有3种方法:MethodWhenMouseDown() MethodWhenMouseUp() MethodWhenMouseMove()但是一两个班级只有:MethodWhenMouseDown()现在哪个更好: 1.在Tool中拥有所有三个方法,而不需要它们的类只调用空方法. 2.实现接口ex. IMouseMoveLi...

c# – 回调接口契约【代码】

我有两个需要受合同约束的.NET方.现在,party1和party2需要能够相互调用某些方法(大多数是调用和报告结果).我有双工合同,但各方都没有使用WCF. 这有设计模式吗? 编辑 双方是同一申请的一部分.我创建了应用程序(party1),其他人创建了一个动态加载的DLL(party2).现在,我们俩都应该能够相互调用方法.所以,我想在我们之间创建一个接口契约.目的是知道是否有一个知道模式来做到这一点?解决方法:一种常见的解决方案是使用某种发布/子模式...

c# – JSON.NET:反序列化一个类包含从接口派生的对象列表【代码】

我有麻烦反序列化我的对象.它包含以下属性:public List<IShape> Shapes { get; set; };和JSON.NET反序列化器总是告诉我,实例化一个接口是不可能的. 我有几个类实现了实现IShape接口的接口,例如折线 – > IPolyline – > IShape的.我已经尝试了两种解决方案 > https://stackoverflow.com/a/8031283/1525505> https://stackoverflow.com/a/12769061/1525505 但我得到了同样的例外,即IShape无法立即被抛出. 我使用TypeNameHandling....

c# – 使用特定接口时的MEF组合导入问题【代码】

我和MEF工作了很长时间,偶尔它会让我发疯.不知道它需要什么. 我有两个我们感兴趣的文件: >我的EXE有2个班级: JobFactory:IJobFactory和SaferWatchProcessor:IJob >具有这些接口定义的Quartz.net DLL 创建容器:var aggregateCatalog = new AggregateCatalog(new DirectoryCatalog(".", "*.dll"),new DirectoryCatalog(".", "*.exe"));Bootstrapper.CompositionContainer = new CompositionContainer(aggregateCatalog, true);目...

c# – 抽象类与接口的建议

我知道接口和抽象类之间的区别.现在我想知道我需要在抽象类上使用接口,反之亦然. 这篇文章我提到了Recommendations for Abstract Classes vs. Interfaces 在那里面 以下是一些建议,可帮助您决定是使用接口还是抽象类来为组件提供多态性.If you anticipate creating multiple versions of your component, createan abstract class. Abstract classes provide a simple and easy way toversion your components. By updating the ba...

c# – 通过接口进行静态属性访问【代码】

老实说,我怀疑这是解决这个问题的最佳方法,但我有一个如此定义的接口:public interface INamed {string ExportName { get; } }实际上我希望这些人都是静态的,但事实证明你不能在接口中拥有静态成员声明.所以为了解决这个问题,我实现了这样的接口:public class TestClass : INamed {public string ExportName {get { return "Export Name"; }} }我会通过做这样的事情去寻找这些人:public class Selector<T> where T: new(), INam...

c# – 有没有理由更喜欢模拟一个接口而不是一个具有可覆盖成员的类?【代码】

我有一个用于交换消息的外部库.在这个库中,我有一个名为Channel的Object. 这是反编译后的结果:public class Channel {public State CurrentState { get { /*Only for code compiling, the value depend on the TCP Connection state.*/return State.ERROR; } }public bool Send(string message){//Some stuff with TCP connection.return true;} public enum State{DISCONNECTED,CONNECTED,ERROR} }现在在我的代码中,我在类中使...

c# – 使用Foq模拟具有显式实现的接口的类【代码】

我想用Foq模拟一个entityframwork DbSet.它类似于:let patients = ([Patient(Guid "00000000-0000-0000-0000-000000000001");Patient(Guid "00000000-0000-0000-0000-000000000002");Patient(Guid "00000000-0000-0000-0000-000000000003");]).AsQueryable()let mockPatSet = Mock<DbSet<Patient>>.With(fun x -><@ // This is where things wrong. x doesn't have a property Providerx.Provider --> patients.Provider @> )我尝...

c# – 继承和转换错误(通用接口)【代码】

如何重构我的代码以摆脱指示点发生的运行时错误? DataSeries&LT SimpleDataPoint&GT需要能够转回IDataSeries< IDataPoint>不知何故 我尝试过使用两个接口的继承,如下所示: 公共类DataSeries< TDataPoint> :IDataSeries< TDataPoint>,IDataSeries< IDataPoint>但收到编译器错误:'DataSeries<TDataPoint>' cannot implement both 'IDataSeries<TDataPoint>' and 'IDataSeries<IDataPoint>'because they may unify for some type ...