📄 sample26.cs
字号:
namespace apiBook
{
using System;
using System.Reflection;
using System.Text;
using System.Security;
public class TestTypeClass
{
public static void Main()
{
//使用InvokeMember方法调用静态方法
Type t = typeof (TestClass);
Console.WriteLine("使用InvokeMember方法访问静态方法:");
Object obj=t.InvokeMember ("HelloWorld", BindingFlags.Public | BindingFlags.InvokeMethod | BindingFlags.Static, null, null, new object [] {});
Console.WriteLine(obj);
//使用InvokeMember方法调用方法
TestClass c = new TestClass ();
Console.WriteLine("使用InvokeMember方法调用类的方法:");
object [] args = new object [] {2, 3};
obj=c.GetType().InvokeMember ("TestMethod",BindingFlags.Instance| BindingFlags.Public | BindingFlags.InvokeMethod, null, c, args);
Console.WriteLine(args[0]+"+"+args[1]+"="+obj);
//使用InvokeMember方法访问属性
Console.WriteLine("使用InvokeMember方法访问类的公有属性:");
obj=t.InvokeMember ("testField", BindingFlags.Instance|BindingFlags.Public | BindingFlags.GetField, null, c, new object [] {});
Console.WriteLine("testField="+obj);
Type iTestPIfcType = typeof(ITestPIfc);
Type iTestCIfcType = typeof(ITestCIfc);
TestPClass testP = new TestPClass();
TestPClass[] testPArray = new TestPClass[5];
Type testP5=testPArray.GetType();
Type testPType = testP.GetType();
TestPClass testC = new TestCClass();
TestPClass[] testCArray = new TestCClass[8];
Type testC8=testCArray.GetType();
TestPClass[] testCArray3 = new TestCClass[3];
TestPClass[,] testCArray33 = new TestCClass[3,3];
Type testC3=testCArray3.GetType();
Type testC33=testCArray33.GetType();
Type testCType = testC.GetType();
Console.WriteLine("接口ITestCIfc是否是从接口ITestPIfc派生的?"+iTestCIfcType.IsSubclassOf(iTestPIfcType));
////使用IsSubclassOf方法判断类间的派生关系
Console.WriteLine("testCType类是否是类testPType的派生类? "+ testCType.IsSubclassOf(testPType));
Console.WriteLine("testPType类是否是自己的派生类?"+testPType.IsSubclassOf(testPType));
Console.WriteLine(" TestPClass[5]对象是否可以从 TestCClass[8]对象取得分配?"+testP5.IsAssignableFrom(testC8));
//使用IsAssignableFrom方法判断对象是否可以互相分配
Console.WriteLine("TestPClass[5]对象是否可以从 TestCClass[3]对象取得分配?"+testP5.IsAssignableFrom(testC3));
Console.WriteLine("TestCClass[3]对象是否可以从 TestPClass[5]对象取得分配?"+testC3.IsAssignableFrom(testP5));
Console.WriteLine("TestCClass[8]对象是否可以从 TestCClass[3]对象取得分配?"+testC8.IsAssignableFrom(testC3));
Console.WriteLine("TestCClass[3]对象是否可以从 TestCClass[8]对象取得分配?"+testC3.IsAssignableFrom(testC8));
Console.WriteLine("TestCClass[3][3]对象是否可以从 TestCClass[3]对象取得分配?"+testC33.IsAssignableFrom(testC3));
Console.WriteLine("TestCClass[3]对象是否可以从 TestCClass[3][3]对象取得分配?"+testC3.IsAssignableFrom(testC33));
string str="";
Type strType=str.GetType();
str=strType.ToString();
//使用ToString方法获取当前对象类型的字符串表达形式
Console.WriteLine("strType.ToString()="+str);
Console.WriteLine("testC3.ToString()="+testC3.ToString());
Console.WriteLine("TestCClass类的实例是TestPClass类实例?"+testPType.IsInstanceOfType(testC));
//使用IsInstanceOfType方法判断对象是否是当前类型的实例
Console.WriteLine("TestPClass类的实例是TestCClass类实例?"+testCType.IsInstanceOfType(testP));
}
}
public class TestClass
{
public static string HelloWorld()
{
Console.WriteLine("正在调用HelloWorld方法");
return "Hello World!";
}
public int TestMethod(int a,int b)
{
Console.WriteLine("正在调用TestMethod方法");
return a+b;
}
public string testField="测试InvokeMember方法调用公有属性";
}
public interface ITestPIfc {}
public interface ITestCIfc : ITestPIfc {}
public class TestPClass : ITestPIfc {}
public class TestCClass : TestPClass {}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -