标签: interface

如何命名界面集合?

情况如下.

public interface IFoo { }

public abstract class FooBase : IFoo { }
Run Code Online (Sandbox Code Playgroud)

现在我需要IFoo一些额外的方法集合.

public class IFooCollection : List<IFoo>
{
   public void UsefullMethod() { }
}
Run Code Online (Sandbox Code Playgroud)

问题是,IFooCollection当它是一个类时看起来像一个接口.选项如下.

  1. 保持它IFooCollection- 我不喜欢这个,因为它看起来像一个界面.
  2. 把它命名FooCollection- 我不喜欢这个,因为它不是foos的集合.
  3. 把它变成FooBaseCollection因为所有的实现IFoo派生自FooBase- 我不喜欢这个,因为这可能永远不会是真的.
  4. 不要创建类,而是提供扩展方法,IList<IFoo>因为只有一个完整的方法 - 我不喜欢这样,因为更改代码因为找不到类的名称...是的,这是令人讨厌的.
  5. 我没有想到或忘记写下来的东西 - 我希望我会喜欢它!

那你会怎么做?我错过了一个命名约定吗?我们基本上使用这个Microsoft .NET库标准.

UPDATE

代码不会变得普遍 - 它只是在GUI工具中将一些数据放入服务器.所以我不关心将这些方法与其他集合一起使用或忽略这些方法.

.net collections interface naming-conventions

0
推荐指数
2
解决办法
276
查看次数

C#使用Interface1和Interface2接受对象

重复:

是否可以使参数实现两个接口?


寻找一种方法来做到这一点:

public interface INumber1 {}
public interface INumber2 {}
public class TestObject : INumber1, INumber2 {}

public static class TestClass
{
    public static void TestMethod(INumber1&INumber2 testobject)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

调用TestMethod:

TestClass.TestMethod(new TestObject());
Run Code Online (Sandbox Code Playgroud)

问题是我需要一个参数来包含来自INumber1和INumber2的方法.提示?

c# interface

0
推荐指数
1
解决办法
212
查看次数

如何实例化具有需要接口对象的构造函数的类

我正在尝试使用Interactive Brokers Java API来查看我是否可以进行一些算法交易(最初在纸面上).我想调用一个叫做ReqMktDepth()类的方法EClientSocket.

该EClientSocket构造需要类型的对象AnyWrapper被传递,并且AnyWrapper是一个接口不是一个具体类.理论上我如何将AnyWrapper类传递给EClientSocket构造函数.

java sockets polymorphism interface instantiation

0
推荐指数
1
解决办法
903
查看次数

收集实现特定接口而不进行转换的类型?

基本上我想知道特定命名空间中的所有类型是否实现了特定的接口IEnumerable.

我知道我能做到:

foreach type ...
    if type is IEnumerable
        ...
Run Code Online (Sandbox Code Playgroud)

但我不想只是为了查询它是否实现了一个接口来强制转换类型,因为无论如何都会抛弃转换.

.net c# interface

0
推荐指数
1
解决办法
158
查看次数

接口使用摘要作为参数声明方法

关于以下示例中的最佳做法,我有这个问题:

interface Request;
interface Service {
  void process(Request request)
}

class MyService implements Service;
class YourService implements Service;

class MyRequest implements Request;
class YourRequest implements Request;
Run Code Online (Sandbox Code Playgroud)

但是如何确保MyService始终接受MyRequest并且YourService只会获得YourRequest,而不是相反?明显的答案"if-instance-of-check" MyService.process(...)看起来很丑陋并且不知何故反对SOLID原则.也许有更好的方法?

也许泛型会很好解决?(但是,如何在必须在Java 1.4下运行的代码中使用它们?)

java interface

0
推荐指数
1
解决办法
202
查看次数

C# - 事件和接口

我有一个接口有几个事件
我有基类实现接口
我有第三类扩展基类(让我们称之为theConcreteClass)

问题:当我做类似的事情: IMyInterface i = new theConcreteClass() 然后我订阅任何事件(i.someEvent + = some_handler ;)事件处理程序从未调用,因为(可能)事件订阅被分配给基类而不是具体类,即使new()运算符创建了具体类.

希望很明显:)
任何建议?

谢谢,
阿迪巴尔达

c# events interface

0
推荐指数
1
解决办法
2288
查看次数

未按预期返回CustomAttributes

我有一些看起来如下的东西:

[CoolnessFactor]
interface IThing {}

class Tester
{
    static void TestSomeInterfaceStuff<T>()
    {
        var attributes = from attribute 
                        in typeof(T).GetCustomAttributes(typeof(T), true)
                        where attributes == typeof(CoolnessFactorAttribute)
                        select attribute;
        //do some stuff here
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我会这样称呼它:

TestSomeInterfaceStuff<IThing>();
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,它根本不会返回任何属性.

思考?

c# attributes interface

0
推荐指数
1
解决办法
83
查看次数

具有仅适用于某些类型参数的方法的泛型类

假设您正在编写库以在屏幕上显示内容,因此您可以创建一个IDisplayable界面.该接口有一种方法可以从对象创建控件:displayable.GetControl().

您想要创建自己的列表类型,可以显示:MyList<T>.现在这个列表只能T是一个IDisplayable,所以你可以在MyList类中询问T应该实现IDisplayable.但是当T不是IDisplayable时,你也想在某些地方使用这个列表类型(结果这个列表不可显示).那么可以说如果T实现了IDisplayable,MyList会实现IDisplayable吗?我也很高兴如果MyList<T>总是实现IDisplayable但是如果你尝试调用,GetControl()如果T不是IDisplayable,则会在运行时抛出异常,但我想知道是否有一种静态类型安全的方法来执行它.可以这样做吗?或者我在寻找错误的解决方案?

编辑:

我同意到目前为止MyList可能有太多责任的建议.我最初的想法是创造一个MyDisplayableList<T> : MyList<T> (where T : IDisplayable).

这种方法的问题是我有很多方法采用MyList并返回MyList(例如Linq中的Select方法).因此,如果我在MyDisplayableList上使用select,我会返回一个MyList,即使它是MyList,我也无法显示它...是否有一种类型安全的方法来处理C#中的这个问题?

c# generics types interface

0
推荐指数
2
解决办法
995
查看次数

Java界面"别名"

请考虑以下两个包含我的问题的简化版本的Java文件

#a.java
package a;
public interface I {
 //...
}

#b.java
package b;
public interface I {
 //... (different stuff from a.I)
}
Run Code Online (Sandbox Code Playgroud)

您会注意到我的项目中有两个名为"I"的接口.这不能改变.我处于一种需要在单个类中使用这两种类型的情况.当然,我当然可以将它们的每个类型作为aI和bI引用,但我试图除了保持可读性之外什么也不做.

我想做这样的事情

interface B extends b.I {

}
Run Code Online (Sandbox Code Playgroud)

这可以让我通过使用B来使用I的接口,并且通过导入使用aI作为我.问题是这不起作用,让我们用这个具体的例子

interface MyList extends List<String> {
}

MyList l = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)

这会产生类型错误.为什么Java"不知道"MyList扩展了List?

另外,我在上面的例子中尝试过转换,但是它会生成一个ClassCastException

思考?

java types interface

0
推荐指数
1
解决办法
1104
查看次数

从Interface类调用IEnumerator

如果这个问题听起来很愚蠢,我是新来的枚举集合,请原谅.

我上课了

public class PersonStuff : IPersonStuff, IEnumerable<User>
    {
        Person person = new Person();
        ...

        IEnumerator<Person> IEnumerable<Person>.GetEnumerator()
        {
            return (person as IEnumerable<Person>).GetEnumerator();
        }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我在上面实现了两个接口:一个是IPersonStuff,另一个是IEnumerable.

Person类是一个简单的getter/setter,每个类型都是字符串,例如名称,地址除了dateofbirth是DateTime.

在我的IPersonStuff中我有这个:

interface IPersonStuff
    {
        ...
        IEnumerator<Person>  IEnumerable<Person>.GetEnumerator();
    }
Run Code Online (Sandbox Code Playgroud)

一旦工作,我想以下面的方式(从任何类)来调用它:

    IPersonStuff personStuff = new PersonStuff();

    foreach (Person u in personStuff)
    {
        //this loop should iterate thru the elements.
    }
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误:

  • 'IEnumerable <...>.GetEnumerator':显式接口声明只能在类或结构中声明

基本上我想知道如何通过IPersonStuff接口调用我在PersonStuff类中的IEnumerator IEnumerable.GetEnumerator().

c# generics ienumerator interface

0
推荐指数
1
解决办法
813
查看次数