如何将asp.net usercontrols的当前类名转换为c#上的字符串?
所以我尝试了GetType(),但出于某种原因,它确实包含名称空间。。。如何将asp.net usercontrols的当前类名转换为c#上的字符串?,c#,reflection,c#-4.0,classname,gettype,C#,Reflection,C# 4.0,Classname,Gettype,所以我尝试了GetType(),但出于某种原因,它确实包含名称空间。。。 C#是否没有指定其名称的类的属性? 例如: public class Parent : System.Web.UI.UserControl { public someFunction(){ Child child = new Child(); Console.WriteLine(child.ThePropertyThatContainsTheName); } } publi
C#是否没有指定其名称的类的属性?
例如:
public class Parent : System.Web.UI.UserControl {
public someFunction(){
Child child = new Child();
Console.WriteLine(child.ThePropertyThatContainsTheName);
}
}
public class Child : Parent {
}
我曾尝试使用名称为硬编码的字符串属性创建子对象,但前提是我们能够找到更好的解决方法。。。也许是思考或表达
提前感谢=)
编辑:我正在处理用户控件…使用
类型。名称
如下:
using System;
class Test
{
static void Main()
{
Console.WriteLine(typeof(Test).Name);
}
}
或者类似这样(如果您是通过对象.GetType
获取类型):
使用GetType()
和Name
Console.Writeline(child.GetType().Name);
或
如果您使用的是ASP.NET Web应用程序项目,则通常使用代码隐藏模型 ASP.NET将从您的aspx/ascx文件动态生成和编译一个类,该文件使用您在代码隐藏文件中定义的类作为基类
this.GetType().Name
和this.GetType().FullName
将返回由ASP.NET生成的自动生成类的名称。此自动生成的类将为您在代码隐藏文件中定义的UserControl/WebPage类创建子类(继承ascx文件的
标记中的关键字/
标记)
如果需要代码隐藏类的名称,请使用:
this.GetType().BaseType.Name
或this.GetType().BaseType.FullName
或者您可以使用反射来获取变量的基类型
control.GetType().BaseType.Name
如果你需要,我可以提供深刻的描述为什么是这样
如果你想,你可以试试这个代码
System.IO.Path.GetFileNameWithoutExtension(((UserControl)control).AppRelativeVirtualPath)
这将为您提供所需的名称,但这不是UserControl的类型,而是文件名。您刚才是否调用了GetType().ToString()或GetType().name?我有点困惑-您是说GetType().name没有返回您想要的吗?我使用了GetType().name和GetType().FullName,但问题是,它们都返回了名称空间,例如:hello\u web\u ui\u child\u aspx
顺便说一下,伙计们,我将此用于usercontrols…=)正如我所提到的,GetType()的问题在于它包含了名称空间,并将所有内容都改为小写Type.Name
不会更改类型名称的大小写,但ASP.NET会对自定义页面和用户控件的类型名称进行损坏,这可能会导致您看到的内容。不幸的是,您看到的类型名称与实际的类型名称不符。ASP.NET会将自定义控件和页面的名称更改为您看到的格式—这确实是您类型的名称:)为什么它会这样设计?没有其他方法可以获得声明的确切类名吗?=)这两种方法都不能使用,因为我在问题中已经提到,使用GetType()包括名称空间。Type.Name属性将不包含名称空间。Type.FullName将包含类名。我的坏,真的。。。我之前没有提到我使用的是ASP.Net UserControls,我稍后会在国内尝试。
control.GetType().BaseType.Name
System.IO.Path.GetFileNameWithoutExtension(((UserControl)control).AppRelativeVirtualPath)