0 0

有没有办法知道一个方法的参数实现了哪个范形接口?5

比如,有一个SomeMethod(object a),我想要知道这个a是否实现了某个范形接口,并且能够转化成那个接口的引用。比如ICollection<someType> ba=(ICollection<someType>)a;  其中,someType为某Type形的变量
2009年3月22日 21:47

3个答案 按时间排序 按投票排序

0 0

如果不想关心泛型参数具体是什么,只想看有没有实现某个泛型接口(非实例化的),那也有稍微恶心点的办法:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

static class Test {
    static void Main(string[] args) {
        var list = new List<string>();
        var listInterfaces = list.GetType().GetInterfaces();
        var iListOfT = listInterfaces.Single(t => Regex.IsMatch(t.ToString(), @"IList`1"));
        Console.WriteLine(iListOfT.GetGenericTypeDefinition() == typeof(IList<>)); // True
    }
}

当然,不知道具体的泛型参数T是什么的话,就没办法把一个变量转换为另一个类型的引用了。楼主要的多半不是这样的效果,而是is/as直接能表达的逻辑……

2009年3月23日 12:59
0 0

Java跟C#的泛型怎么能混为一谈,呵呵。

楼主可以具体一点描述应用场景么?

如果你接受的参数a是想转成某个泛型类型的已经实例化的类型,像这种:

ICollection<string>

的话,那么直接用is运算符就可以判断,用as运算符就能够转换:
var ba = a as ICollection<string>;
if (null != ba) {
    // ... a implements ICollection<string>
}


如果你的SomeMethod自身是泛型方法,而a要实现的接口跟这个泛型方法的泛型参数有关系的话,例如这样:
void SomeMethod<T>(object a) {
    var ba = a as ICollection<T>;
    if (null != ba) {
        // ...
    }
}

那么跟上面一样,可以用is或者as来达到目的。

如果SomeMethod不是泛型方法,或者泛型参数跟a要判断的泛型接口没关系的话,那就……嗯还是等楼主具体描述场景再说。
一个对象即便实现了某个泛型接口,具体实现的也肯定是那个泛型接口的某个实例而不可能仍然带有泛型参数,所以我一时也想不出其它的场景……

2009年3月23日 12:26
0 0


老刑提的问题..晚辈不敢乱来了哈哈...直接从问答下面提供的问题列表复制2个链接给你看看..或许你真有帮助..

http://www.iteye.com/problems/9382

http://www.iteye.com/problems/5587

2009年3月22日 22:19

相关推荐

    Java --- 方法参数为接口(子类实现接口中重写后的方法流程图)

    Java --- 方法参数为接口(子类实现接口中重写后的方法流程图)

    设计一个Shape接口和它的两个实现类Square和Circle,要求如下

    1)Shape接口中有一个抽象方法area(),方法接收有一个double类型的参数,返回一个double类型的结果 2)Square和Circle中实现了Shape接口的area()抽象方法,分别求正方形和圆形的面积并返回在测试类中创建Square和...

    Java接口的实现 操作

    例如,如果我们定义了一个接口 MyInterface,我们可以在某个类中使用 implements 关键字来实现该接口。例如: ```java public interface MyInterface { void method1(); void method2(); } public class MyClass...

    支付宝接口实现_参数以及实现方式

    支付宝接口实现_参数以及实现方式

    通用IDispatch接口实现方法

    5. **实现IDispatch接口**:尽管MFC没有提供现成的IDispatch接口实现,但可以使用ATL的IDispatchImpl类作为基础,或者手动实现GetIDsOfNames、Invoke等方法。GetIDsOfNames用于根据名称查找DISPID,Invoke则负责实际...

    使用ATL建立一个包含2个接口的COM组件,使用VC Win32 Console Application进行客户程序的开发,达到调用该组件中这3个方法的目的

    在另一个普通的接口中实现2个方法:通过三角形的3条边长求面积和两数之间的除法()(如:a/b);参数类型自行设计。 2、使用VC Win32 Console Application进行客户程序的开发,达到调用该组件中这3个方法的目的。...

    数据抽取-Kettl动态参数调用HTTP、POST接口

    Kettle,也称为Pentaho Data Integration(PDI),是一个强大的开源ETL工具,提供了丰富的数据处理功能。本教程将深入探讨如何在Kettle中使用动态参数调用HTTP和POST接口,实现高效的数据交互。 一、Kettle简介 ...

    支付宝接口实现参数

    使用支付宝接口时需要了解的所有实现参数的详细介绍

    service_java接口远程调用_get、post、带参数远程调用_

    本篇文章将详细讲解如何使用Java实现GET和POST方法的远程接口调用,以及如何处理带有参数的情况。 首先,我们要了解HTTP协议中的GET和POST请求。GET请求通常用于获取资源,其参数包含在URL中;而POST请求常用于提交...

    VB代码接口实现实例

    在实际应用中,我们可能会有一个`Execute`函数或方法,它接受实现了特定接口的对象作为参数,这样就可以确保执行的操作与接口定义的规范一致。例如,我们创建一个名为`ManipulateObject`的函数: ```vbnet Sub ...

    直接FFD(DFFD)_几何参数化方法_可以对二维翼型实现参数化_实现网格变形_matlab

    资源名:直接FFD(DFFD)_几何参数化方法_可以对二维翼型实现参数化_实现网格变形_matlab 资源类型:matlab项目全套源码 源码说明: 全部项目源码都是经过测试校正后百分百成功运行的,如果您下载后不能运行可联系我...

    接口基础知识

    - 如果一个类实现了某个接口,那么它必须实现该接口的所有方法,除非它本身也被声明为抽象类。 3. **设计原则**: - 抽象类有利于代码复用,而接口更有利于代码的扩展和维护。 - 面向接口编程可以降低模块间的...

    C#继承,接口,多态的实现与区别

    前者主要通过方法重载(Overloading)实现,即在同一个作用域内可以有多个同名但参数列表不同的方法。后者则依赖于方法重写(Overriding)和抽象类及接口,使得子类可以根据需要提供不同的实现。 1. **方法重载**:...

    JSP几种页面间传递参数实现的方法

    例如,下面的实例实现了把第一个JSP页面的参数传递给第三个页面的功能: 1.jsp whats your name 2.jsp &lt;form method=post action="3.jsp?pass=11"&gt; String name=request.getParameter("username")...

    实现mybatis-只有一个参数传递的查询+代码+注释

    本文将详细讲解如何在MyBatis中实现一个只有一个参数传递的查询,包括配置、映射文件和Java代码,以及相关注释。 首先,搭建MyBatis环境是基础步骤。你需要在项目中添加MyBatis的依赖,如`pom.xml`文件中引入Maven...

    FLEX接口的定义和实现

    在这个例子中,`ClientData`类实现了`IDataInterface`接口,并提供了所有接口方法的实现。 3. 在MXML中实现接口,可以在顶级组件的声明中使用`implements`关键字,如下所示: ```xml &lt;!-- 其他组件内容 --&gt; ...

    api验证接口参数加密+时效性验证+私钥+Https

    WebApiDemo-master这个文件可能是一个示例项目,展示了如何在Web API应用中实现上述的安全措施。它可能包含了代码示例,演示了如何配置和使用加密、时效性验证、私钥以及HTTPS。通过研究这个项目,开发者可以学习到...

    MFC IDispatch接口实现方法

    在上面的代码中,`DISP_FUNCTION_ID`用于定义一个可调用的方法,`DISP_PROPERTY_EX_ID`用于定义一个可读写的属性。`DISPID`是方法或属性的唯一标识符,`VT_`开头的值是参数或返回值的数据类型,`VTS_`开头的值表示...

    Java实验-接口.docx

    这两个方法没有具体实现,而是由实现该接口的类去完成。定义接口的语法如下: ```java interface Vehicle { void start(String car); void stop(String cars); } ``` 这里,`void`表示方法无返回值,`start`...

    关于接口的实例,详细分析出接口的使用方法

    例如,有多个类实现同一个接口,它们可以在同一种上下文中被处理: ```java MyInterface obj = new MyClass(); obj.method1(); ``` 4. **接口的默认方法和静态方法** Java 8引入了默认方法(default methods)...

Global site tag (gtag.js) - Google Analytics