Frage

So habe ich versucht, GetType (), aber aus irgendeinem Grund, es enthält den Namespace ... Wie funktionieren C # nicht eine Eigenschaft für eine Klasse hat ihren Namen anzugeben?
Zum Beispiel:

public class Parent : System.Web.UI.UserControl {
    public someFunction(){
        Child child = new Child();
        Console.WriteLine(child.ThePropertyThatContainsTheName);
    }
}

public class Child : Parent {
}

Ich habe versucht, das Kind mit einer String-Eigenschaft zu erstellen, die den Namen hat hartcodiert, aber nur, wenn wir eine bessere Abhilfe dazu finden könnten ... vielleicht Reflexion oder Ausdrücke ...

Vielen Dank im Voraus =)

Edit: Ich arbeite an Benutzern Kontrollen durch die Art und Weise ...

War es hilfreich?

Lösung

Wenn Sie ein ASP.NET Web Application Projekt verwenden, werden Sie in der Regel des Code-Behind-Modell werden.

ASP.NET dynamisch erzeugen und eine Klasse von Ihrer aspx / ascx Datei kompilieren, die die Klasse verwendet man als Basisklasse in der Code-Behind-Datei definiert ist.

this.GetType().Name und this.GetType().FullName wird den Namen der automatisch generierte Klasse von ASP.NET generiert zurückzukehren. Diese automatisch generierte Klasse wird die Usercontrol / WebPage Klasse Unterklasse Sie in Ihrem Code-Behind-Datei (Inherits Schlüsselwort in der <%@Control ...>-Tag Ihrer ascx Datei / <%@Page ...>-Tag Ihrer aspx-Datei) definiert haben.

Wenn Sie den Namen Ihrer Code-Behind-Klasse wollen, verwenden Sie:

this.GetType().BaseType.Name oder this.GetType().BaseType.FullName

Andere Tipps

Verwenden Type.Name wie folgt aus:

using System;

class Test
{
    static void Main()
    {
        Console.WriteLine(typeof(Test).Name);
    }
}

oder so (wenn Sie den Typen über Object.GetType erhalten):

using System;

class Foo { }

class Test
{
    static void Main()
    {
        Foo foo = new Foo();
        Console.WriteLine(foo.GetType().Name);
    }
}

Mit GetType() und Name

Console.Writeline(child.GetType().Name);

oder

Console.Writeline(child.GetType().FullName);

Oder Sie können Reflektion verwenden Basistyp Ihrer Variablen zu bekommen

control.GetType().BaseType.Name

Wenn Sie mir tief Beschreibung zur Verfügung stellen kann, warum es so ist.

Wenn Sie möchten, können Sie diesen Code versuchen

System.IO.Path.GetFileNameWithoutExtension(((UserControl)control).AppRelativeVirtualPath)

Dies gibt Ihnen den Namen, den Sie wollen, aber das ist nicht die Art des Benutzersteuerelements, aber es ist Dateinamen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top