C# generic defs class
本文关键字:class defs generic | 更新日期: 2023-09-27 18:27:23
我想为C#中的defs类找到优雅的解决方案示例:
代替:
class Class1
{
public static readonly string length = "length_Class1";
public static readonly string height = "height_Class1";
public static readonly string width = "width_Class1";
}
class Class2
{
public static readonly string length = "length_Class2";
public static readonly string height = "height_Class2";
public static readonly string width = "width_Class2";
}
创建模板类。我想到了以下解决方案,但它看起来并不那么优雅:
internal abstract class AClass
{
}
internal class Class1 : AClass
{
}
internal class Class2 : AClass
{
}
class Class1<T> where T : AClass
{
public static readonly string length = "length_" + typeof(T).Name;
public static readonly string height = "height_" + typeof(T).Name;
public static readonly string width = "width_" + typeof(T).Name;
}
编辑:
我有很多从外部数据源获取/设置的参数名称,我希望有两个Def实例。长度、重量、高度仅用于说明,还有更多。
编辑:
我选择Generics是因为我认为有一种方法可以在编译时进行连接(就像在c++中一样)。有可能做到吗?
你能帮我提供更优雅的解决方案吗?
谢谢!!!
在我看来,实际上并不需要属性是static
,也不需要类是泛型。所以,你可以做一些类似的事情:
class ParameterNames
{
public string Length { get; private set; }
public string Height { get; private set; }
public string Width { get; private set; }
public ParameterNames(string className)
{
Length = "length_" + className;
Height = "height_" + className;
Width = "width_" + className;
}
}
尽管您可能想要重构代码,以便访问外部资源的代码根本不需要处理这些参数名称:
abstract class ExternalResource
{
private readonly string m_className;
protected ExternalResource(string classname)
{
m_className = className;
}
protected object GetParameterValue(string name)
{
string fullName = name + '_' + m_className;
// actually access the resource using fullName
}
}
public class SpecificParameters : ExternalResource
{
public SpecificParameters(string className)
: base(className)
{ }
public int Length { get { return (int)GetParameterValue("length"); } }
…
}
这样做不会避免重复串联字符串,但我不确定为什么要避免,这样做应该很快。