代码之家  ›  专栏  ›  技术社区  ›  Jronny

如何将asp.net usercontrols的当前类名转换为c#上的字符串?

  •  3
  • Jronny  · 技术社区  · 16 年前

    所以我尝试了GetType(),但出于某种原因,它确实包含名称空间。。。
    C#是否没有指定其名称的类的属性?

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

    我曾尝试使用名称为硬编码的字符串属性创建子对象,但前提是我们能够找到更好的解决方法。。。也许是思考或表达。。。

    提前感谢=)

    编辑:顺便说一下,我正在处理用户控件。。。

    4 回复  |  直到 16 年前
        1
  •  15
  •   to StackOverflow    16 年前

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

    this.GetType().Name this.GetType().FullName Inherits 中的关键字 <%@Control ...> ascx文件的标记/ <%@Page ...> 标记您的aspx文件)。

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

        2
  •  4
  •   Andrew Hare    16 年前

    使用 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);
        }
    }
    
        3
  •  1
  •   Murph    16 年前

    使用 GetType() Name

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

    Console.Writeline(child.GetType().FullName);
    
        4
  •  1
  •   Mike    16 年前

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

    control.GetType().BaseType.Name
    

    如果你需要,我可以提供深刻的描述为什么是这样。

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

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

    推荐文章