typeof(C# 参考)C# 反射 通过类名创建类实例
来源:互联网 发布:Python与ipython 编辑:程序博客网 时间:2024/06/05 05:57
C# 反射 通过类名创建类实例2011-12-24 上午 12:34“反射”其实就是利用程序集的元数据信息。
反射可以有很多方法,编写程序时请先导入
System.Reflection 命名空间,假设你要反射一个 DLL 中的类,并且没有引用它(即未知的类型):
Assembly assembly = Assembly.LoadFile("程序集路径,不能是相对路径"); // 加载程序集(EXE 或 DLL)
object obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)"); // 创建类的实例
若要反射当前项目中的类可以为:
Assembly assembly = Assembly.GetExecutingAssembly(); // 获取当前程序集
object obj = assembly.CreateInstance("类的完全限定名(即包括命名空间)");
// 创建类的实例,返回为 object 类型,需要强制类型转换 也可以为:
Type type = Type.GetType("类的完全限定名"); object obj = type.Assembly.CreateInstance(type); ======================================================= 补充:1)反射创建某个类的实例时,必须保证使用类的完全限定名(命名空间 + 类名)。Type.GetType 方法返回 null 则意味搜索元数据中的相关信息失败(反射失败),请确保反射时使用类的完全限定名。2)反射功能十分强大,没有什么不能实现的。若实现“跨程序集”,请使用第一种方法创建类的实例,并反射该实例的字段、属性、方法、事件... 然后动态调用之。
主页
技术资源库
学习
下载
支持
社区 登录 | 中国(简体中文) | |
MSDN Library
开发工具和语言
Visual Studio 2010
Visual Studio
Visual Studio 语言
Visual Basic 和 Visual C#
Visual C#
C# 参考
C# 关键字
运算符关键字(C# 参考)
as(C# 参考)
is(C# 参考)
new(C# 参考)
sizeof(C# 参考)
typeof(C# 参考)
true(C# 参考)
false(C# 参考)
stackalloc(C# 参考)
社区内容
添加代码示例和提示以增强此主题。
更多...
此文章由人工翻译。 将光标移到文章的句子上,以查看原文。 译文
原文
typeof(C# 参考)
Visual Studio 2010
其他版本
此主题尚未评级 评价此主题
用于获取类型的 System.Type 对象。 typeof 表达式采用以下形式:
System.Type type = typeof(int);
备注
若要获取表达式的运行时类型,可以使用 .NET Framework 方法 GetType,如以下示例中所示:
int i = 0;
System.Type type = i.GetType();
不能重载 typeof 运算符。
typeof 运算符也能用于公开的泛型类型。 具有不止一个类型参数的类型的规范中必须有适当数量的逗号。 下面的示例演示如何确定方法的返回类型是否是泛型 IEnumerable(Of T)。 假定此方法是 MethodInfo 类型的实例:
string s = method.ReturnType.GetInterface
(typeof(System.Collections.Generic.IEnumerable<>).FullName);
示例
C#
public class ExampleClass
{
public int sampleMember;
public void SampleMethod() {}
static void Main()
{
Type t = typeof(ExampleClass);
// Alternatively, you could use
// ExampleClass obj = new ExampleClass();
// Type t = obj.GetType();
Console.WriteLine("Methods:");
System.Reflection.MethodInfo[] methodInfo = t.GetMethods();
foreach (System.Reflection.MethodInfo mInfo in methodInfo)
Console.WriteLine(mInfo.ToString());
Console.WriteLine("Members:");
System.Reflection.MemberInfo[] memberInfo = t.GetMembers();
foreach (System.Reflection.MemberInfo mInfo in memberInfo)
Console.WriteLine(mInfo.ToString());
}
}
/*
Output:
Methods:
Void SampleMethod()
System.String ToString()
Boolean Equals(System.Object)
Int32 GetHashCode()
System.Type GetType()
Members:
Void SampleMethod()
System.String ToString()
Boolean Equals(System.Object)
Int32 GetHashCode()
System.Type GetType()
Void .ctor()
Int32 sampleMember
*/
此示例使用 GetType 方法确定用来包含数值计算的结果的类型。 这取决于结果数字的存储要求。
C#
class GetTypeTest
{
static void Main()
{
int radius = 3;
Console.WriteLine("Area = {0}", radius * radius * Math.PI);
Console.WriteLine("The type is {0}",
(radius * radius * Math.PI).GetType()
);
}
}
/*
Output:
Area = 28.2743338823081
The type is System.Double
*/
C# 语言规范
有关更多信息,请参见 C# 语言规范。C# 语言规范是 C# 语法和用法的权威资料。
请参见
参考
C# 关键字
is(C# 参考)
运算符关键字(C# 参考)
System.Type
概念
C# 编程指南
其他资源
C# 参考
本文是否对您有所帮助? 是 否
社区内容 添加
常见问题
© 2012 Microsoft. 版权所有。
保留所有权利 | 商标 | 隐私权声明 | 个人信息中心 | 法律信息 | MSDN Flash 中心 | 联系我们 | 网站反馈
Assume that method is an instance of a MethodInfo type:
- typeof(C# 参考)C# 反射 通过类名创建类实例
- C# 反射 通过类名创建类实例
- C# 反射 通过类名创建类实例
- C# 反射 通过类名创建类实例
- C# 反射 通过类名创建类实例
- C#反射 获取程序集信息和通过类名创建类实例
- C#反射 获取程序集信息和通过类名创建类实例
- C#反射 获取程序集信息和通过类名创建类实例
- C#反射 获取程序集信息和通过类名创建类实例
- C# 反射通过类名实例化类
- C# 反射通过类名实例化类
- c# 类反射(type.gettype/typeof)和实例化
- c# 类反射(type.gettype/typeof)和实例化
- 在C# 编程中通过类名动态创建实例
- C#通过实例讲解反射
- c#通过类名动态创建对象方法
- swift通过类名反射创建类
- C#如何使用反射实现通过字符串创建类
- 在CentOS系统上编译、安装、配置OpenCV
- Sicily 1198. Substring
- 八款开源 Android 游戏引擎
- tomcat免安装版配置
- Python生成随机数
- typeof(C# 参考)C# 反射 通过类名创建类实例
- struts2的文件上传
- Web 服务编程,REST 与 SOAP
- 抽象方法和虚方法的区别
- WPF设置图片灰度显示与恢复彩色显示
- spring aop expression简单说明
- 使用swingbench压力测试oracle rac
- 改写equals时遵守的约定
- Android进阶之widget桌面