我有一个基本抽象类,也实现了一个特定的接口.
public interface IMovable<TEntity, T>
where TEntity: class
where T: struct
{
TEntity Move(IMover<T> moverProvider);
}
public abstract class Animal : IMovable<Animal, int>
{
...
public virtual Animal Move(IMover<int> moverProvider)
{
// performs movement using provided mover
}
}
Run Code Online (Sandbox Code Playgroud)
然后我继承了一些类,其中一些必须覆盖基类的接口实现方法.
public class Snake : Animal
{
...
public override Animal Move(IMover<int> moverProvider)
{
// perform different movement
}
}
Run Code Online (Sandbox Code Playgroud)
我的接口方法在移动后返回相同的对象实例,因此我可以使用链接或直接在return语句中执行某些操作而不使用其他变量.
// I don't want this if methods would be void typed
var s = GetMySnake();
s.Move(provider); …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我正在处理一个更大的类(超过50种方法),每个类都相当复杂.我并不担心复杂性,因为它们在将功能块分离成较小的方法然后调用它们方面仍然是直截了当的.这就是方法数量变大的方式(很多这些方法都是私有的 - 特别是隔离了一些功能).
然而,当我进入实现阶段时,我发现我已经忘记了哪些方法已经实现,哪些方法没有实现.然后在链接阶段,我收到未实现方法的错误.这样会很好,但是类之间存在很多相互依赖关系,为了链接应用程序,我需要准备好一切.然而,在进入下一个课程之前,我宁愿让我们学习一门课程.
由于我无法控制的原因,我不能使用IDE - 只有纯文本编辑器和g ++编译器.有没有办法在没有完全链接的情况下在一个类中找到未实现的方法?现在我确实在每个方法的实现cpp文件中对方法签名进行文本搜索,但这非常耗时.
我试图使用XPath 2.0EXP //span/string(.)中libxml2,但它不工作.
所以,我的问题是:libxml2支持XPath 2.0与否?
debugging objective-c libxml2 interface-implementation xpath-2.0
java中的extends和implements在性能和内存等方面有什么区别.例如,采取以下方案,
1)
public interface PrintResult
{
public final int NO_ERROR=0;
public final int SUCCESS=1;
public final int FAILED=-1;
}
public class PrintProcess implements PrintResult
{
//Perform some operation
}
2)
public class PrintResult
{
public final int NO_ERROR=0;
public final int SUCCESS=1;
public final int FAILED=-1;
}
public class PrintProcess extends PrintResult
{
//Perform some operation
}
Run Code Online (Sandbox Code Playgroud)
对于上述场景(1,2),使用extends(派生子类),实现(实现接口)之间的区别是什么.在性能,记忆等方面.?
我刚刚发现杰克逊没有实现JSR-353并且我们已经设计了模块..所以我迫不及待地想要找到替代这个API来开始工作!:d
我搜索了一个实现标准但却找不到任何有趣结果的API,因为我们计划用标准编码并强制系统使用特定的实现(我正在拼命搜索的API)
我正在尝试创建一个ObservableConcurrentDictionary.此对象将用于多线程应用程序,它的数据用于通过控件ItemsSource属性填充控件.
这是我提出的实现:
public sealed class ObservableConcurrentDictionary<TKey, TValue> : ConcurrentDictionary<TKey, TValue>, INotifyCollectionChanged, INotifyPropertyChanged
{
#region Constructors
public ObservableConcurrentDictionary()
: base()
{
}
public ObservableConcurrentDictionary(IEnumerable<KeyValuePair<TKey, TValue>> collection)
: base(collection)
{
}
public ObservableConcurrentDictionary(IEqualityComparer<TKey> comparer)
: base(comparer)
{
}
public ObservableConcurrentDictionary(int concurrencyLevel, int capacity)
: base(concurrencyLevel, capacity)
{
}
public ObservableConcurrentDictionary(IEnumerable<KeyValuePair<TKey, TValue>> collection, IEqualityComparer<TKey> comparer)
: base(collection, comparer)
{
}
public ObservableConcurrentDictionary(int concurrencyLevel, int capacity, IEqualityComparer<TKey> comparer)
: base(concurrencyLevel, capacity, comparer)
{
}
public ObservableConcurrentDictionary(int concurrencyLevel, IEnumerable<KeyValuePair<TKey, TValue>> collection, IEqualityComparer<TKey> comparer)
: base(concurrencyLevel, …Run Code Online (Sandbox Code Playgroud) .net wpf inotifycollectionchanged inotifypropertychanged interface-implementation
我知道并理解Java中接口的价值.您编写接口,然后您可以更改您的实现,而无需使用该接口更改任何代码.通常,术语"合同"与接口一起使用.我理解它的方式是接口定义应用程序和实现之间的"契约".
所以,当我创建一个实现时,我必须履行合同.我的问题是,我必须履行的合同究竟是什么?
显然,您必须至少提供与接口具有相同签名的方法.否则代码将无法编译.这是所有的"合同"吗?似乎应该有更多.
例如,我读过一些文章,讨论测试界面与测试特定实现的价值,或两者兼而有之.我认为对接口进行测试非常有价值,这样您就可以知道哪些输入具有预期的输出.在我看来,这也将是"合同"界面的一部分.接口的每个实现都应该从相同的输入产生相同的输出.显然,没有办法在代码中强制执行此合同,但可以通过测试用例强制执行.我的想法在这里错了吗?
最后,实现有哪些副作用?在这里,我主要讨论可能作为实现的一部分发生的任何持久性.假设我有一个实现,它会在执行操作时将一些记录保存到数据库中.这会以某种方式成为界面"合同"的一部分吗?如果是这样,你怎么能执行这份合同?从界面层面来看,我不知道实现实际上在做什么.我所知道的是我给它输入,它给了我一个输出,我可以测试.发生的任何持久性是否也被视为"输出"?如果是这样,我只是看不出如何测试和执行.我是坚持无知的支持者,所以我可以知道应该坚持某些东西,但我不知道它是如何持久存在的.所以,我只是不知道什么时候实际存在的东西.如果您的界面有一些简单的CRUD操作可能很简单,但我想考虑更复杂的界面.
我希望我的问题有道理,有人可以提供一些好的反馈.我想一般性地讨论这个问题,但如果我不清楚我在谈论什么,我可以提供一个具体的例子.
我正在研究C中的一个大项目,我想使用接口(.h)和实现(.c)文件来组织它,类似于许多面向对象的语言,如Objective-C或Java.我熟悉在C中创建静态库,但我认为对我的项目这样做是不必要的复杂.如何在ANSI C中实现接口/实现范例?我主要使用GCC进行编译,但我的目标是严格遵守ANSI C和交叉编译器的兼容性.谢谢!
在 Angular 6 中,当我们创建一个组件时,该组件的 .ts 文件有一个实现 OnInit 类的类,但是当我们删除默认方法(ngOnInit)时,它可以正常工作。所以我的问题是,如果它实现了某个类,那么它必须有一些必须在这个实现的类中实现的方法,如果不需要有方法,那么实现 OnInit 类的目的是什么。
我正在尝试创建一个基于的自定义集合Stack<T>.当我看Stack<T>[从元数据]在Visual Studio中,它表明,Stack<T>工具ICollection,这将需要它来实现ICollection的CopyTo(Array array, index)方法,但是相反,它被示为具有ICollection<T>的CopyTo(T[] array, index)方法.有人可以解释为什么会这样吗?
我正在尝试创建一个模仿Stack<T>相当多的集合.当我ICollection像堆栈一样实现时,它需要我使用该CopyTo(Array array, index)方法,但我真正想要的是使用该CopyTo(T[] array, index)方法,就像Stack<T>这样.有没有办法实现这个没有实现ICollection<T>?