社区
C#
帖子详情
有关泛型类调用的问题
chentank
2012-08-31 04:11:15
我现在在一个窗体中需要通过调用一个实例化的泛型类来完成功能。
现有一个窗体A 一个泛型类B<T> 所有的功能都封装在该类中
如何能够把泛型类B<T>的实例传送给窗体A,并让A能够调用?
...全文
195
19
打赏
收藏
有关泛型类调用的问题
我现在在一个窗体中需要通过调用一个实例化的泛型类来完成功能。 现有一个窗体A 一个泛型类B 所有的功能都封装在该类中 如何能够把泛型类B的实例传送给窗体A,并让A能够调用?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
qldsrx
2012-09-04
打赏
举报
回复
你仔细看下dynamic的解释和用法,那个其实并不是一个数据类型,而是代表运行时解释的一个关键字,如果用typeof(dynamic)查看其类型的话,等价于typeof(object),object是不受任何约束的,但是运行时代表了一个真实类型而不是object,因此可以直接通过点号访问内部所有成员。
chentank
2012-09-03
打赏
举报
回复
[Quote=引用 14 楼 的回复:]
引用 10 楼 的回复:
是不是这样的:
在A中定义 dynamic b = new Object();
b = 泛型类的实例;
然后通过b来调用相关功能?
定义只要dynamic b;或者dynamic b = null;
后面调用直接b = 泛型类的实例;
然后判断b!=null的时候,就直接用b.xxx来访问,只不过你写代码的时候,没有语法提示,会告诉你行为……
[/Quote]
dynamic不支持类似泛型约束的机制么?
showjim
2012-08-31
打赏
举报
回复
怎么也看不明白楼主想要干什么?楼主最好贴一段你认为不好的代码,错误的也行,好让别人知道你想干什么?
qldsrx
2012-08-31
打赏
举报
回复
[Quote=引用 10 楼 的回复:]
是不是这样的:
在A中定义 dynamic b = new Object();
b = 泛型类的实例;
然后通过b来调用相关功能?
[/Quote]
定义只要dynamic b;或者dynamic b = null;
后面调用直接b = 泛型类的实例;
然后判断b!=null的时候,就直接用b.xxx来访问,只不过你写代码的时候,没有语法提示,会告诉你行为要在运行时才会解析。
stonespace
2012-08-31
打赏
举报
回复
不过B<T> a=new B<T>();可能无法通过编译,一般来说,创建泛型的实例,要用反射,
stonespace
2012-08-31
打赏
举报
回复
另外一个解决方案是把A中需要用到不确定T参数的功能提取出来,作为泛型方法,
比如
class A
{
private int Func<T>(T a)
{
B<T> a=new B<T>();
//....
}
}
stonespace
2012-08-31
打赏
举报
回复
[Quote=引用 5 楼 的回复:]
对A来说 如何能知道B<T>实例中T的类型?这才是问题所在 这里T可能是我自己写的具有相同接口的多个类
如果按stonespace的这种方法,那我就需要在A中把所有T类型都定义一次,
有没有更好的办法呢?
[/Quote]
如果对A来说,T参数是不确定的,你应该把A定义为泛型,A<T>,然后里面可以使用B<T>作为变量方法参数返回值,
但A是窗体,窗体无法定义为泛型,解决这个问题的办法是,把A中需要使用的不确定的T参数的功能提出来,封装成一个另一个泛型类C<T>,C<T>内部可以使用不确定T的B<T>作为变量参数和返回值,然后A在窗体中创建C<T>并调用方法,
chentank
2012-08-31
打赏
举报
回复
是不是这样的:
在A中定义 dynamic b = new Object();
b = 泛型类的实例;
然后通过b来调用相关功能?
chentank
2012-08-31
打赏
举报
回复
[Quote=引用 8 楼 的回复:]
你可以让你的泛型类继承接口啊,这样你将B<T>的实例通过接口在A中定义并调用即可。
另外C#4.0支持dynamic关键字,就不需要知道你的T是什么了,在运行时确定。
[/Quote]
我的T类型是有固定接口的,但是泛型类没有。使用dynamic我比较迷湖,能不能给个小例子
qldsrx
2012-08-31
打赏
举报
回复
你可以让你的泛型类继承接口啊,这样你将B<T>的实例通过接口在A中定义并调用即可。
另外C#4.0支持dynamic关键字,就不需要知道你的T是什么了,在运行时确定。
chentank
2012-08-31
打赏
举报
回复
如何使用适配器?给个小例子行不?
devmiao
2012-08-31
打赏
举报
回复
可以使用适配器,适配器接口实现泛型的逆变,然后传递这个适配器。
chentank
2012-08-31
打赏
举报
回复
[Quote=引用 4 楼 的回复:]
如果你想让A使用T参数已经确定的B实例,那么很简单,就像你用List<int>一样,把参数明确了,B<int>就相当于一个普通的class,像普通class一样用就可以,可以定义B<int>的变量,也可以作为参数,作为返回值都可以,只要T确定,
[/Quote]
对A来说 如何能知道B<T>实例中T的类型?这才是问题所在 这里T可能是我自己写的具有相同接口的多个类
如果按stonespace的这种方法,那我就需要在A中把所有T类型都定义一次,
有没有更好的办法呢?
stonespace
2012-08-31
打赏
举报
回复
如果你想让A使用T参数已经确定的B实例,那么很简单,就像你用List<int>一样,把参数明确了,B<int>就相当于一个普通的class,像普通class一样用就可以,可以定义B<int>的变量,也可以作为参数,作为返回值都可以,只要T确定,
stonespace
2012-08-31
打赏
举报
回复
既然已经实例化了,那么T是什么已经指定了,当然可以让A使用,不过A只能使用已经确定了T参数的B类实例,不能使用没有确定参数的泛型对象,
除非你把A也定义为泛型A<T>,不过A是窗体,你不能这么做,
天下如山
2012-08-31
打赏
举报
回复
直接实例化不行么?
B<int> ibt=new B<int>();
ibt.Methods();
bdmh
2012-08-31
打赏
举报
回复
A中声明B<T>类型变量不就行了,是这个意思吗,或者写个方法返回
解决C#
泛型类
参数无法
调用
带参数的构造函数的
问题
本文探讨了C#泛型无法
调用
带参数构造方法的
问题
,并提出基于表达式目录树的解决方案。当泛型约束要求new()时,传统方法只能
调用
无参构造函数。通过动态构建表达式树并编译为委托,实现了向
泛型类
型构造函数传递参数的功能。具体实现步骤包括:创建参数表达式、获取构造函数信息、构建New表达式、编译Lambda表达式并
调用
委托。该方法突破了C#泛型实例化的限制,为需要参数化构造的场景提供了可行方案。
java
泛型类
继承_java
泛型类
的继承规则
首先看一看java
泛型类
的使用:/*** 一个泛型方法:使程序更加安全* 并且能被更多的使用*@author丁****@param*/class Pair{privateT first;privateT second;//实例化类型变量public static Pair makePair(Classcl){try{return new Pair<>(cl.newInstance(),...
C#
泛型类
一、
泛型类
的简介 所谓的泛型就是不知道具体的类型的一种通用表达。泛型和概念和C++中的模板,LabVIEW中的变体略有相似。用泛型定义的类具有多态的作用。 泛型的出现目的在于解决能应用在不同数据类型上的共有代码。 示例如下: class Program { public class Static<T> //定义的
泛型类
{ int p...
C#泛型(三)——
泛型类
的功能
在创建
泛型类
时,还需要一些其他C#关键字。例如,不能把null赋予
泛型类
型。此时,如下一节所述,可以使用default关键字。如果
泛型类
型不需要Object类的功能,但需要
调用
泛型类
上的某些特定方法,就可以定义约束。 本节讨论如下主题: ●默认值 ●约束 ●继承 ●静态成员 首先介绍一个使用泛型文档管理器的示例。文档管理器用于从队列中读写文档。先创建一个新的控制台项目DocumentM
java的枚举类的values_java – 使用
泛型类
Enum.values扩展枚举
我试图用一个枚举的所有可用值来初始化一个
泛型类
. HEre是我想要的工作方式:public class MyClass> {E[] choices;public MyClass() {choices = E.values();}但是,Eclipse中不接受对E.values的
调用
,表示该方法对于此E是未定义的.使用这个构造函数是接受的,但是要求
调用
者提供这些值:public MyClass(...
C#
111,128
社区成员
642,536
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章