Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将asp.net usercontrols的当前类名转换为c#上的字符串?_C#_Reflection_C# 4.0_Classname_Gettype - Fatal编程技术网

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

如何将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

所以我尝试了GetType(),但出于某种原因,它确实包含名称空间。。。
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)