所以这是我正在尝试做的一个例子:
//main.cs
using System;
class Program {
static string myString = "Hello world";
}
//example.cs
using System;
public class DoStuff {
public static void ShowVariable() {
Console.WriteLine(this.GetType().GetField("_datafile").GetValue(this));
}
}
期望的输出:
Hello world
我需要做什么?我完全不知道。是的,我已经在这个网站上查看了有关反思的问题,但我只是不明白!我可以替换什么,以便无论我传入“_datafile”,即使它是一个变量作为字符串(例如用户名而不是“用户名”),它将显示该变量?
谢谢。
答案 0 :(得分:1)
如果我的问题是对的,你想要这个:
public static void ShowVariable() {
Console.WriteLine(typeof(Program).GetField("myString", BindingFlags.Static | BindingFlags.NonPublic).GetValue(this));
此处代码采用myString
类中的静态Program
字段。
答案 1 :(得分:0)
GetField方法返回在其调用的Type中定义的FieldInfo。字符串参数是字段的名称。所以如果你有:
public string myString = "something";
你会调用
GetField("myString");
请注意,GetField(String)仅返回公共字段。要获取其他类型的字段,必须使用GetField(String,BindingFlags)方法。有关这些方法的更多信息here。
答案 2 :(得分:0)
这个类与'hello world'无关。我想你想检查另一个类,即使这样,你调用的字段名是_datafile,它不是“myString”,它包含“Hello world” “......我有点困惑......
//example.cs
using System;
public class DoStuff {
public static void ShowVariable() {
Console.WriteLine(this.GetType().GetField("_datafile").GetValue(this));
//Desired output:
//Hello world
}
}
我的例子有效..
public class DoStuff
{
public string _datafile = "hello world";
public void ShowVariable()
{
Console.WriteLine(this.GetType().GetField("_datafile").GetValue(this));
//Desired output:
//Hello world
}
}
class Program
{
static void Main(string[] args)
{
new DoStuff().ShowVariable();
Console.ReadLine();
}
}
答案 3 :(得分:0)
根据您的问题,您试图在另一个班级private
中获取班级static
的{{1}} myString
字段Program
的值。如果您正在尝试这样做,那么这就是您在DoStuff
类中所需要的(您可以将整个语句写在一行中)
DoStuff