gpt4 book ai didi

c# - 在基类中定义一个返回自身名称的方法(使用反射)——子类继承此行为

转载 作者:太空狗 更新时间:2023-10-29 23:11:21 24 4
gpt4 key购买 nike

在 C# 中,使用反射,是否可以在基类中定义返回其自身名称(以字符串形式)的方法,并让子类以多态方式继承此行为?

例如:

public class Base
{
public string getClassName()
{
//using reflection, but I don't want to have to type the word "Base" here.
//in other words, DO NOT WANT get { return typeof(Base).FullName; }
return className; //which is the string "Base"
}
}

public class Subclass : Base
{
//inherits getClassName(), do not want to override
}

Subclass subclass = new Subclass();
string className = subclass.getClassName(); //className should be assigned "Subclass"

最佳答案

public class Base
{
public string getClassName()
{
return this.GetType().Name;
}
}

实际上,您不需要创建方法 getClassName() 来获取类型名称。您可以在任何 .Net 对象上调用 GetType(),您将获得类型的元信息。

你也可以这样做,

public class Base
{

}

public class Subclass : Base
{

}

//In your client-code
Subclass subclass = new Subclass();
string className = subclass.GetType().Name;

编辑

此外,如果您真的需要在任何情况下定义 getClassName(),我强烈建议将其设为属性 [根据 .net 框架设计指南],因为 getClassName() 的行为不是动态的并且每次调用它时,它总是会返回相同的值。

public class Base
{
public string ClassName
{
get
{
return this.GetType().Name;
}
}
}

编辑2

阅读克里斯评论后的优化版本。

public class Base
{
private string className;
public string ClassName
{
get
{
if(string.IsNullOrEmpty(className))
className = this.GetType().Name;
return className;
}
}
}

关于c# - 在基类中定义一个返回自身名称的方法(使用反射)——子类继承此行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3059318/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com