Tag: 接口

有没有办法强制派生类实现抽象类或嵌套在基类中的接口?

我有这个抽象类: public abstract class Task { public string ID {get; set;} public string Name {get; set;} public abstract class Options{}; public abstract void Execute(); } 我有其他类扩展这个类: public class Copy : Task { public override void Execute() { Console.Write (“running”); } } 我希望每个派生类都实现自己的Options类,以便它们可以拥有自己的参数。 因此, Search类必须使用它需要的属性来实现它自己的Options类,例如“ includesubfolders ”,“ casesensitive ”等。 同时Move任务可以实现它自己:“ 覆盖 ”等。 在抽象类中使属性和方法抽象强制派生类来实现它们自己但在同一个类中定义嵌套抽象类或接口不会强制它的派生类实现它们自己的类。 我可以在每个派生类中单独定义每个属性但由于我想在稍后的Execute方法中查询Task.Options中的属性而失败。 我也尝试过动态对象,但这带来了其他所有问题。

如何构建应用程序目录层次结构中的接口

将它们全部放在一个单独的文件夹结构中,还是与实现它们的类一起放入?

将公共属性约束到List 中的特定类型

我的原始问题与特定类型的Constrain类型基本相同。 我想要完成的基本上就是这个。 public List MyPublicProperty { get; set; } where T IMyCustomInterface 现在阅读上面的问题我可以看出它显然是不可能的。 为了让您了解上下文,我正在构建一个旨在支持多种类型的解析器(假设它们实现了特定的接口),但我没有对它可能解析的数据类型进行编译类型假设。 它只是提供一个受支持的类型列表,应该能够自动计算其余的类型。 基本上我想知道的是,对于这样的属性(如果存在的话),除了运行时类型检查时(除了运行时类型检查时)是什么? 编辑:建议的解决方案似乎不起作用。 我最终得到的代码如下: public class CustomSerializableTypeList : List where T : ITcpSerializable { } CustomSerializableTypeList myCustomTypes = new CustomSerializableTypeList(); 并收到以下错误: 类型’System.Type’不能在generics类型或方法’CustomSerializableTypeList’中用作类型参数’T’。 没有从’System.Type’到’ITcpSerializable’的隐式引用转换。 一旦我查看并考虑已建议的generics实现,该错误就非常有意义。 必须有办法解决这个问题。

NHibernate中有不同类型答案的问题

我正试图找到问卷调查问题的整洁解决方案。 让我们说我有一个Questionnaire ,其中包含一些Answer ,例如 public class Questionnaire { public virtual ISet Answers {get;set;} } 答案需要根据问题的不同类型,例如出生日期,十分之一,你为什么这么认为等等。 我的第一个想法是这样的: public class Question { public virtual QuestionType TypeOfQuestion {get;set;} public virtual string PromptText {get;set;} } public class Answer { public virtual Question Question {get;set;} } public class DateTimeAnswer : Answer { public virtual DateTime Response {get;set;} } public class […]

C#中的替代内联接口实现

我想在C#中使用内联接口实现,但是阅读像这样或者这样的post我发现它不像Java那样。 假设这个界面: public interface MyListener { void onHandleOne(); void onHandleTwo(); } 我将此接口作为参数传递: myMethod(MyListener listener){ //some logic } 当我调用它时,我想像在java中一样进行内联实现: myMethod(new MyListener () { @Override public void onHandleOne() { //do work } @Override public void onHandleTwo() { //do work } }); 作为替代方案,我创建了一个实现yhis接口的类,并使用此类来调用我的方法: public class MyImplementor : MyListener { public void onHandleOne() { //do work } public void […]

c#:Inherited / interface静态成员?

有没有办法要求一个类有一个特定的抽象成员? 像这样的东西: public interface IMaxLength { public static uint MaxLength { get; } } 或许这个: public abstract class ComplexString { public abstract static uint MaxLength { get; } } 我想强制一种类型(通过inheritance或接口?)具有静态成员的方式。 可以这样做吗?

静态成员和接口

我刚刚对这个主题进行了一些SO问题,发现这是(目前?)不可能在接口中定义静态成员或者使静态方法成为虚拟。 我现在正在努力应对这种情况。 让我试着用一个简单的例子来描述它: 我有一个名为say IAnimal的接口,其定义如下: interface IAnimal { … int Chromosomes {get; } //should ideally be static, but that’s not allowed! … } 然后我有一个实现IAnimal的基类Animal,并提供所有动物共有的一些方法的实现: abstract class Animal : IAnimal { … public abstract int Chromosomes {get; } //necessary becuz of IAnimal … } 在这之下,我有从Doginheritance的Dog , Cat和Zebra类,并为它们的物种提供这个属性的具体实现。 现在问题是:这些类是在运行时发现的(通过Pluggable-modules的Assembly.LoadFile() becuz)。 发现的类保存在List ,我们稍后用它来创建具体的狗和猫。 用于创建动物的输入参数是染色体编号,因此例如他们会问: 创建具有72条染色体的类型的动物。 所以我需要以某种方式获取List中每个Type的Chromosome属性值并返回第一个匹配的Type 。 由于Chromosomes不是静态的(如果是,我可以很容易地运行给定类型的静态成员 […]

java是否支持像c#这样的显式接口实现?

我试过这样做: interface pet { void sleep(); } interface robot { void sleep(); } public class roboGarfield implements pet , robot { /* * this gives error void pet.sleep(){ } */ @Override public void sleep() { System.out.println(“this isn’t really specific..”); } public static void main(String[] args){ roboGarfield t = new roboGarfield(); t.sleep(); ((pet)t).sleep(); // similar to […]

接口和标头

今天我遇到了C#接口的概念,我有一个希望很简单的问题,看看我是否理解它们……它们是否与C ++头文件非常相似? 我的意思是,从我得到的,你定义一个类的主干,而不是实际定义它的作用,这类似于一个标题,对吗? 我阅读了整个MSDN定义,它并没有真正让我100%清楚。 我相信我有这个想法(编写并附上了一个非常基本的程序,看看我是否理解)但是至少在明天晚上至少完全理解它们的基础知识非常重要。 例: namespace InterfaceTest { class Program { static void Main(string[] args) { KitchenStaff newKitchen = new KitchenStaff(); newKitchen.getBakers(); newKitchen.getBaristas(); newKitchen.getCooks(); Console.ReadLine(); KitchenDuties newKitchen1 = new KitchenDuties(); newKitchen1.getBakers(); newKitchen1.getBaristas(); newKitchen1.getCooks(); Console.ReadLine(); } } interface Bakers { void getBakers(); } interface Cooks { void getCooks(); } interface Baristas { void getBaristas(); } […]

类inheritance,强制新类实现某些function

好吧,我正在搞乱一些事情,特别是接口。 假设我有一个“猫”类,其基础为“动物”动物有一个方法就像这样 public virtual void Walk() { // Do walking stuff } 因此Cat会用以下方式覆盖它: public override void Walk() { // Do cat specific walking stuff } 简单吧? 这是我的问题,有没有办法强制cat覆盖基本的Walk()方法? 因此,如果另一个开发人员添加了Dog类,他们将被迫实现自己的Walk方法(即使它只是base.Walk())? 所以接口就解决了这个问题,这就是我所尝试过的 Cat:Animal:Interface Animal必须实现Walk方法,但Cat不支持 Cat:Animal,Interface Cat必须实现Walk方法,但如果开发人员没有添加或忘记’,Interface’那么它将“打破”它。 有人可以给我一些指针来解决这个问题吗? 谢谢。 编辑1 这就是我的目标,我希望它能让它更清晰。 public class Animal { public Animal() { Console.WriteLine(“Animal”); } public virtual void Walk() { } } public class […]