110,539
社区成员
发帖
与我相关
我的任务
分享
class StaticDb
{
private static string Db = "zzw";
public static string GetDb()
{
return Db; //假如说,这里返回的不是静态成员变量Db,而是直接返回"zzw",那么我应该怎么修改这个返回值?
}
}
class ClassDb
{
private string Db = "zzw2";
public string GetDb()
{
return Db;
}
}
public class User
{
private string name = "实例名";
public User()
{
}
public string GetUser()
{
//测试的时候,这个GetDb的返回值如何注入。
return StaticDb.GetDb();
}
public string GetUser2()
{
//如果内部是实例了一个对象之后运行的,那么怎么修改这个实例对象的GetDb()的返回值?
ClassDb classDb = new ClassDb();
return classDb.GetDb();
}
}
static void Main(string[] args)
{
StaticTest();
//College();
//WriteTest();
}
public static void StaticTest()
{
//直接访问静态方法
string result = StaticDb.GetDb();
Console.WriteLine("直接访问静态方法:" + result);
//反射访问静态方法
Assembly asm = Assembly.Load("Reflection");
Type type = asm.GetType("Reflection.StaticDb");
MethodInfo method = type.GetMethod("GetDb");
result = method.Invoke(null, null).ToString();
Console.WriteLine("反射访问静态方法:" + result);
//反射修改静态方法调用的那个静态变量
BindingFlags flag = BindingFlags.Static | BindingFlags.NonPublic;
FieldInfo field = type.GetField("Db", flag);
field.SetValue(asm, "zhangzw");
Console.WriteLine("反射修改静态方法调用的那个静态变量");
//直接访问静态方法
result = StaticDb.GetDb();
Console.WriteLine("直接访问静态方法:" + result);
//实例化一个测试类,测试类中的某个方法调用的静态方法
User user = new User();
result = user.GetUser();
Console.WriteLine("实例化一个测试类,测试类中的某个方法调用的静态方法:" + result);
Console.ReadLine();
}