让我们假设我写这个课:
public A<T> : T
{
}
基本上,我希望A
扩展(继承)T
。
例如,如果我有这个:
public class B
{
public string Name { get { return "B"; } }
}
我应该能够完成这样的事情:
B instance = new A<B>();
Console.WriteLine(instance.Name);
无法编译。
如何从泛型参数扩展?
如果无法完成,为什么不可能?
答案 0 :(得分:1)
你不能这样做,因为即使你可以写一个约束来说“它必须是一个班级”......
// NOT WORKING CODE...
public class B<T> : T where T : class
......无法保证课程没有密封。
这就是编译器说你不能这样做的原因。
你可以做的是创建一个真正的基类并将T约束到该基类并从基类继承......
public class B<T> : BaseType where T : BaseType
示例:
public class BaseClass
{
}
public class A : BaseClass
{
}
public class B<T> : BaseClass where T : class
{
}
用法:
var x = new B<A>();
答案 1 :(得分:0)
你可以让它发挥作用:
if (isset($_POST['prodCode'])) {
$value = $_POST['prodCode'];
// save the letter
$letter = substr($value, 0, 1);
// get id
$id = (int) substr($value, 1, strlen($value) - 1);
// get value with letter and incremented id
$valueIncremented = $letter . ++$id;
}
// with $_POST['prodCode'] = 'f102' you will get $valueIncremented = 'f103'
虽然class Program
{
public static void Main()
{
B instance = new A<B>();
Console.WriteLine(instance.Name);
Console.Read();
}
}
public class A<T> : B where T : B { }
public class B
{
public string Name { get { return "B"; } }
}
应该直接从A
继承。不确定你的最终目标是什么。
答案 2 :(得分:0)
也许而不是尝试创建一个继承泛型的类,您可以创建一个扩展方法来执行您正在寻找的任务。
B
使用中:
public static void ExtensionTest<T>(this T test)
{
Console.WriteLine("ExtensionTest");
}