C# 如何获取类对象的名称

C# 如何获取类对象的名称,c#,reflection,C#,Reflection,如何在表单类中获取PageHeader类(textline1,textline2)的TextLine对象的名称并将其显示在表单中。课程如下 class Textline { string text; string name; } class PageHeader { TextLine textline1; TextLine textline2; } 假设您有PageHeader的实例pgHead。您可以通过以下方式获取textline1的名称: pgHead.

如何在表单类中获取
PageHeader
类(
textline1
textline2
)的
TextLine
对象的名称并将其显示在表单中。课程如下

class Textline
{
    string text;
    string name;
}

class PageHeader
{
    TextLine textline1;
    TextLine textline2;
}

假设您有
PageHeader
的实例
pgHead
。您可以通过以下方式获取textline1的名称:

pgHead.textline1.name
但是在这个示例中,您应该在类的所有成员之前添加
public
关键字

[编辑] 如果您只想获取PageHeader类型的字段名,请按如下方式尝试反射:

var items = typeof(PageHeader).GetFields(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public);

string fieldsNames = "";

foreach (System.Reflection.FieldInfo fld in items)
{
    fieldsNames += fld.Name + "\n";
}

MessageBox.Show(fieldsNames);

我想这就是你需要的:

class Textline
{
    string text;
    string name;
    public string Name { get { return name; } }
}
然后:

textline1.Name

如果您同意Barna的答案,请不要忘记设置Name属性。我将介绍一个匹配的构造函数:

class TextLine
{
    private string text;
    private string name;

    public TextLine( string name )
    {
       this.name = name;
    }

    public string Name
    {
        get {return name;}
    }
}
然后将其用于:

TextLine tl = new textLine("MyName");
System.Console.Out.Writeln( "name of tl: {0}", tl.Name );


马里奥

@jalf,真的没必要这么小题大做。礼貌是绝对不花钱的。向用户展示如何纠正他们的错误,不要只是因为他们犯了错误而咆哮。不是每个人都知道如何绕过stackoverflow@罗布:我注意到你没有“向用户展示如何纠正错误”。我这样做过,至少有几百次。但是你不需要“了解你的方法”,去看你问题的现场预览,然后说“嗯,我的代码不可读,我想知道我能做些什么”。这是关于你是否足够关心让你的问题对那些你寻求帮助的人有可读性。如果你不在乎这一点,你就有充分的理由生气。@user673453:当你发布一个问题时,在文本输入框的正上方有许多按钮。其中一个具有
{}
符号,用于格式化代码。请在上面加糖,用它。在输入框的下方,它精确地显示了当你被问到问题时,你的问题会是什么样子。如果不可读,请返回并找出如何使其可读。不要只是键入一些文本,闭上眼睛,点击“ok”,依靠其他人让你的问题可读。谢谢。@jalf-如果你是一个堆栈溢出高手,为什么你没有注意到用户的低声誉分数,这清楚地表明@user673453没有太多使用堆栈溢出…@Rob博士:谁说你是一个高手?我一直想说的一点是,这与你用了多少钱无关。即使您以前从未使用过该网站,您也应该能够查看显示在文本输入框下方的实时预览,是吗?如果你能看到这一点,那么你也应该能够认识到“嗯,我的源代码都是乱七八糟的,实际上是不可读的”。@Anton是否可以在创建PageHead实例的情况下显示对象名称?你可以在两个文本行实例可见的任何地方执行此操作。但是,您必须创建它们(新的文本行(“namegoesher”)不。Textline和PageHeader是类,因此没有实例化,您就没有任何可以获得值的本质。换句话说,您应该先创建PageHeader的实例,然后创建两个Textline实例,并将它们分配给textline1和textline1。而且别忘了添加公共关键字!@Anton不可能使用Reflection吗n获取表单中PageHeader对象的名称。好的,我似乎不清楚您是想问。如果您打算调查PageHeader类的textline1和textline2字段的值,在这种情况下,实例化是不可避免的。但是如果您打算只获取PageHeader类型字段的名称,那么如果不能使用反射,他的案例反射将是最好的。