Los*_*nos 8 .net c# generics syntax
是否有语法技巧来获取泛型类中的常量而不指定(ad-hoc)类型?
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;
Run Code Online (Sandbox Code Playgroud)
有一个关于静态变量(常量)不在不同类型之间共享的警告MyClass<object>,MyClass<int>但我的问题是可能的语法技巧.
Obl*_*age 12
使用非泛型抽象父类.
public abstract class MyClass
{
public const string MyConstant = "fortytwo";
}
public class MyClass<T> : MyClass
{
// stuff
}
var doeswork = MyClass.MyConstant;
Run Code Online (Sandbox Code Playgroud)
当然,这假设常量需要成为泛型类的一部分; 如果它具有公共可访问性,我没有看到你不会将它放在一个单独的类中的原因.
拥有非泛型抽象父类对于您制作的每个泛型类都是一个好主意; 泛型类实际上是特定子类型的模板,而不是真正的父类,因此拥有一个真正的非泛型父类可以使一些技术(例如但不限于此类)更容易.
像这样的东西有效:
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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
此方法适用于您要提供的任何不依赖于类型参数的静态类型或值.它也适用于静态方法.
(注意:如果您不希望任何人实例化基类,请将其抽象化.)
| 归档时间: |
|
| 查看次数: |
2070 次 |
| 最近记录: |