gpt4 book ai didi

c# - 试图通过反射获得文字

转载 作者:太空宇宙 更新时间:2023-11-03 20:28:42 24 4
gpt4 key购买 nike

假设我有以下代码:


Container.cs

public class Container
{
public readonly string IdType;

public Container( string aIdType )
{
IdType = aIdType;
}
}

SuperContainerA.cs

public class SuperContainerA : Container
{
public SuperContainerA( /*x parameters*/ ) : base("A") {}
}

SuperContainerB.cs

public class SuperContainerB : Container
{
public SuperContainerB( /*y parameters*/ ) : base("B") {}
}

SuperContainerToTheInfinityAndBeyond.cs

public class SuperContainerB : Container
{
public SuperContainerB( /*y parameters*/ ) : base("It's Over 9000!") {}
}

基于此,我要检索的是发送到 TypeId"A""B"> 来自构造函数。

这里的问题是......我需要在程序初始化期间检索这些值,然后再创建这些类的实例,所以我认为使用反射是我最好的选择。 (注意:如果每个构造函数的参数数量相同,则创建类的实例以检索值将是有效的,但它们可以更改。:()

是否可以使用反射来检查我的源代码和/或程序集的文字? (如果我能看到类似源代码的东西,那么我可以使用正则表达式来获取值。)(注意:将源作为资源文件包括到我的程序中不是一个选项:P)

我正在考虑声明常量来保存该值,然后强制一个命名规则,这样我以后就可以使用反射来获取 then 了。像...

public class SuperContainerA
{
public const string ctIdType = "A";
}

public class SuperContainerB
{
public const string ctIdType = "B";
}

...但我不确定这是否是解决此问题的最佳方法,因为我没有任何东西可以帮助我检查这些常量是否已声明以及它们在编译期间是否获得了正确的名称。

实际上,如果语言有某种静态继承,这在这种情况下会有很大帮助,但我听到一些程序员提示静态继承与其说是一种治疗方法,不如说是一种头痛。

无论如何,我正在寻找替代品。欢迎任何想法。

最佳答案

救援属性!

public class IdTypeAttribute: Attribute
{
public string IdType { get; private set; }

public IdTypeAttribute(string idType)
{
IdType = idType;
}
}

[IdType("B")]
public class SuperContainerB: Container
{
// whatever you like...
}

然后您可以通过反射访问属性。很容易做到...

var type = typeof(SuperContainerB);
var attribute = (IdTypeAttribute)type.GetCustomAttributes(
typeof(IdTypeAttribute), false)[0];
var idType = attribute.IdType;

关于c# - 试图通过反射获得文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8804077/

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