как получить полное имя объекта в .NET? - PullRequest
2 голосов
/ 07 августа 2011

В .NET (изначально .NET CF) как получить полный адрес и имя объекта?

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            Button myButton = new Button();
            MessageBox.Show(GetFullName(myButton));
        }

        string GetFullName(object obj)
        {
            string path = null;
            // should retrieve the 'WindowsFormsApplication1.Form2.myButton' , but how?
            return path;
        }

    }
}

Ответы [ 2 ]

2 голосов
/ 07 августа 2011

Как уже говорили другие, myButton - это переменная в вашем примере, поэтому у нее нет имени, как у члена класса.Тем не менее, вы можете попробовать что-то вроде этого (обратите внимание, я установил свойство Name для кнопки и изменил параметр на Control) ...

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void Form2_Load(object sender, EventArgs e)
        {
            Button myButton = new Button();
            myButton.Name = "myButton";
            MessageBox.Show(GetFullName(myButton));
        }

        string GetFullName(Control ctl)
        {
            return string.Format("{0}.{1}", this.GetType().FullName, ctl.Name);
        }

    }
}
2 голосов
/ 07 августа 2011
// should retrieve the 'WindowsFormsApplication1.Form2.myButton' , but how?

Это невозможно.

Объект в C # находится где-то в управляемой куче (его даже можно перемещать) и идентифицируется ссылкой на него. Может быть много ссылок на один и тот же объект, но не существует «обратного указателя» от объекта, куда бы он ни ссылался.

class Program
{
  int number;
  public Program next;

  private static Program p1 { number = 1 };
  private static Program p2 { number = 2, next = p1 }

  private static int Main(int argc, string[] argv)
  {
    p2.DoStuff(p2);
  }

  void DoStuff(Program p)
  {
    // In here, the program with m_Number = 1 can be reached
    // as p1, p.next, p2.next and this.next. All of them are
    // references to the same object.
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...