【发布时间】:2016-12-29 13:24:17
【问题描述】:
我是编程新手,我有一个关于 Generic 的问题。这是我的小程序的结构:
public enum FieldsA
{
A,
B,
C
}
public enum FieldsB
{
A,
B,
C
}
public abstract class Page
{
}
public abstract class BasePage<T> : Page where T : struct, IComparable
{
public void Update()
{
// code
}
}
public class ClassA : BasePage<FieldsA>
{
}
public class ClassB : BasePage<FieldsB>
{
}
public class MainClassA
{
private ClassA _classA;
public MainClassA(ClassA classA)
{
_classA = classA;
}
public void Method()
{
_classA.Update();
}
}
public class MainClassB
{
private ClassB _classB;
public MainClassB(ClassB classB)
{
_classB = classB;
}
public void Method()
{
_classB.Update();
}
}
我想问一下如何正确地创建一些静态方法,我在其中包装了Update() 方法。我试过这样的事情:
public static class Helper
{
public static void Update<T>(BasePage<T> page)
{
page.Update();
}
}
并将Method() 中的内容替换为:
public class MainClassB
{
private ClassB _classB;
public MainClassB(ClassB classB)
{
_classB = classB;
}
public void Method()
{
Helper.Update(_classB);
}
}
(与MainClassA 相同)但它不起作用 -> 编译错误:类型 T 必须是不可为空的值类型才能将其用作泛型类型或方法 BasePage 中的参数 T。
感谢您的提示和帮助。
【问题讨论】:
-
请比“它不起作用”更具体。你有没有编译错误?运行时异常?还有什么?
-
我更新了。 public static void Update
(BasePage 中存在编译错误page)
标签: c# generics inheritance static