你意思是基类 a=new 子类();这时候是可以把a直接转换成子类类型的。。有2种办法,1是直接强制转换。2是使用as但是。。如果你 基类 a=new 基类()。。这时候你是无法把a转换为继承自它的类型的。。除非用反射,动态的创建一个子类,把父类的东西赋予它
解决方案 »
- 关于using()语句,()中的问题
- 为什么更新不了
- 关于BackgroundWorker控件进度条的问题?
- 不显示反汇编
- 菜鸟搞了一个hello程序,怎么打包成setup.exe?
- c#如何读取.xls文件内容?
- 谁能给个用视图解决DataGrid分页的源码,谢谢
- 关于false 运算符的问题
- 如何根据string的值来创建现有的Form的实例,在线给分
- 在学习Remoting时发现可以用WebService客户端的方式访问HttpChannel德Remoting服务器端。
- 例如鼠标指向 文件载入 下面手指就绪就变成文件载入,鼠标指向别的就绪也随之改变。用C#在winform中如何实现这个效果。
- 一个简单又很奇怪的char转byte问题
我希望可以在不知道子类类型的前提下直接转成子类声明, 类似功能 var b = ( a.GetType() )a; 当然这个写法是错误的,所以想知道有什么办法可以达到这样的效果。
我希望可以在不知道子类类型的前提下直接转成子类声明, 类似功能 var b = ( a.GetType() )a; 当然这个写法是错误的,所以想知道有什么办法可以达到这样的效果。我明白你的意思。。这要使用到泛型。。比如GetObj<T>() where T:基本类类型, new(){}
我想了解的是在不显式的指定其子类型做转换的前提下, 有没有什么办法。 Type类能不能帮上忙 ?
if( t is A)
t.aa="XX";
else if(t is B)
t.bb="XXX";
........还是用泛型吧骚年
class Base
{
}
class A : Base
{
public int P1 { get; set; }
}class B: Base
{
public int P2 { get; set; }
}class Program
{
public int SomeMethod(Base obj)
{
if (obj is A) return ((A)obj).P1;
else if (obj is B) return ((B)obj).P2;
else
throw new NotImplementedException("你很蛋疼");
}
}
楼主你确定这是你想要的吗?
不是的 是我前面没描述清楚, 我想要的是, 我当前只有一个object, 不知道其基类,也不知道子类。 可否通过Type类转换为子类结果 var res = (obj.GetType())object; 此语句仅描述意思
比如你有a和b
现在传入一个字符串"a",通过这个字符串去找到a,并调用如果连这个都不知道,那就根本和反射不沾边.你现在是有个object类型的变量,但是不知道类型,你想先匹配出类型,再实例化?
对,我想在仅仅只有一个object对象没有任何其他信息的情况下匹配出类型, 有没有可能 ?
显式的类型转换是在编译时处理的,在编译时可能根本不知道某个变量真正的类型是什么,具体的类型只有在运行的时候,通过语句一条一条执行才能知道变量的实际类型,GetType()或反射就是在运行时处理的,试想一下这样两种方式怎么硬把它们合到一起去呢?
有几种办法来解决这个问题:
1、有共同基类,可通过基类的虚方法(属性)来访问子类的成员,接口也可以。
2、如果没有共同基类,但在写代码的时候知道某个方法或属性的名称,并且你用的是.net 4.0或更高版本,可以用dynamic关键字。
3、如果只是想调用一个方法,并且这个方法在所有类型里的声明都一样,可以用委托。
4、如果没有任何共同点,可以用一个配置文件来说明哪个类型调用哪个方法,然后用反射来调用。
如果以上情况都不满足你的要求,要么改动原来的程序来满足,要么你就改行吧。
了解了, 多谢