我想在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;
}
编辑:
我有很多从外部数据源获取/设置的参数名称,我希望有两个Defs实例。长度,重量,高度仅适用于插图,还有更多。
编辑:
我选择了Generics,因为我认为有一种方法可以在编译时进行连接(比如在c ++中)。有可能吗?
你能帮我找到更优雅的解决方案吗?
感谢!!!
答案 0 :(得分:1)
在我看来,您实际上并不需要属性为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"); } }
…
}
执行此操作不会避免重复连接字符串,但我不确定为什么要避免这种情况,这样做应该非常快。