public 通用 .NET 中的静态(const)class
public static (const) in a generic .NET class
是否有语法技巧可以在不指定(临时)类型的情况下获取泛型 class 中的常量?
public class MyClass<T>{
public const string MyConstant = "fortytwo";
}
// I try to avoid this type specification.
var doeswork = MyClass<object>.MyConstant;
// Syntax similar to what I'd like to accomplish.
var doesnotwork = MyClass.MyConstant;
关于静态变量(常量)不在 MyClass<object>
和 MyClass<int>
等不同类型之间共享的警告,但我的问题是关于可能的可用语法技巧。
使用非通用抽象父级 class。
public abstract class MyClass
{
public const string MyConstant = "fortytwo";
}
public class MyClass<T> : MyClass
{
// stuff
}
var doeswork = MyClass.MyConstant;
这当然假设常量需要成为泛型的一部分是有原因的 class;如果它具有 public 可访问性,我看不出您为什么不将其放在单独的 class.
中的原因
拥有一个非泛型的抽象父代 class 对你创建的 每个 个泛型 class 来说是个好主意;泛型 class 实际上是特定子类型 classes 的模板,而不是真正的父代,因此拥有真正的非泛型父代可以使一些技术(例如,但当然不限于,这个)容易多了。
像这样的东西有效:
using System;
namespace Demo
{
public class MyClass // Use a non-generic base class for the non-generic bits.
{
public const string MyConstant = "fortytwo";
public static string MyString()
{
return MyConstant;
}
}
public class MyClass<T>: MyClass // Derive the generic class
{ // from the non-generic one.
public void Test(T item)
{
Console.WriteLine(MyConstant);
Console.WriteLine(item);
}
}
public static class Program
{
private static void Main()
{
Console.WriteLine(MyClass.MyConstant);
Console.WriteLine(MyClass.MyString());
}
}
}
此方法适用于您要提供的不依赖于类型参数的任何静态类型或值。它也适用于静态方法。
(注意:如果您不想让任何人实例化基础 class,请将其抽象化。)
是否有语法技巧可以在不指定(临时)类型的情况下获取泛型 class 中的常量?
public class MyClass<T>{
public const string MyConstant = "fortytwo";
}
// I try to avoid this type specification.
var doeswork = MyClass<object>.MyConstant;
// Syntax similar to what I'd like to accomplish.
var doesnotwork = MyClass.MyConstant;
关于静态变量(常量)不在 MyClass<object>
和 MyClass<int>
等不同类型之间共享的警告,但我的问题是关于可能的可用语法技巧。
使用非通用抽象父级 class。
public abstract class MyClass
{
public const string MyConstant = "fortytwo";
}
public class MyClass<T> : MyClass
{
// stuff
}
var doeswork = MyClass.MyConstant;
这当然假设常量需要成为泛型的一部分是有原因的 class;如果它具有 public 可访问性,我看不出您为什么不将其放在单独的 class.
中的原因拥有一个非泛型的抽象父代 class 对你创建的 每个 个泛型 class 来说是个好主意;泛型 class 实际上是特定子类型 classes 的模板,而不是真正的父代,因此拥有真正的非泛型父代可以使一些技术(例如,但当然不限于,这个)容易多了。
像这样的东西有效:
using System;
namespace Demo
{
public class MyClass // Use a non-generic base class for the non-generic bits.
{
public const string MyConstant = "fortytwo";
public static string MyString()
{
return MyConstant;
}
}
public class MyClass<T>: MyClass // Derive the generic class
{ // from the non-generic one.
public void Test(T item)
{
Console.WriteLine(MyConstant);
Console.WriteLine(item);
}
}
public static class Program
{
private static void Main()
{
Console.WriteLine(MyClass.MyConstant);
Console.WriteLine(MyClass.MyString());
}
}
}
此方法适用于您要提供的不依赖于类型参数的任何静态类型或值。它也适用于静态方法。
(注意:如果您不想让任何人实例化基础 class,请将其抽象化。)