4

所以我尝试过 GetType() 但由于某种原因,它确实包含命名空间......
C# 没有指定其名称的类的属性吗?
例如:

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

public class Child : Parent {
}

我尝试使用硬编码名称的字符串属性创建 Child ,但前提是我们能找到更好的解决方法......也许是反射或表达式......

提前感谢=)

编辑:顺便说一句,我正在研究用户控件...

4

4 回答 4

15

如果您使用的是 ASP.NET Web 应用程序项目,您通常会使用代码隐藏模型。

ASP.NET 将从您的 aspx/ascx 文件动态生成和编译一个类,该文件使用您在代码隐藏文件中定义的类作为基类。

this.GetType().Name并将this.GetType().FullName返回由 ASP.NET 生成的自动生成类的名称。这个自动生成的类将继承您在代码隐藏文件中定义的 UserControl/WebPage 类(ascx 文件标签中的Inherits关键字/ aspx 文件标签中的关键字)。<%@Control ...><%@Page ...>

如果您想要代码隐藏类的名称,请使用:

this.GetType().BaseType.Name或者this.GetType().BaseType.FullName

于 2009-12-23T08:38:54.503 回答
4

像这样使用Type.Name

using System;

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

或像这样(如果您通过 获取类型Object.GetType):

using System;

class Foo { }

class Test
{
    static void Main()
    {
        Foo foo = new Foo();
        Console.WriteLine(foo.GetType().Name);
    }
}
于 2009-12-10T14:31:53.757 回答
1

使用GetType()Name

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

或者

Console.Writeline(child.GetType().FullName);
于 2009-12-10T14:34:39.443 回答
1

或者您可以使用反射来获取变量的基本类型

control.GetType().BaseType.Name

如果您需要,我可以提供深入的描述为什么会这样。

如果你愿意,你可以试试这个代码

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

这将为您提供所需的名称,但这不是 UserControl 的类型,而是文件名。

于 2009-12-29T07:52:25.957 回答