ems您正在为字段寻找T类型(泛型类型),然后您希望限制T支持的类型。我更新了我的答案,请阅读我的答案的末尾,因为在C#中,指定泛型类型的支持类型有一些限制。还可以阅读aha,所以如果我对诸如where T:Struct之类的约束感到满意,那么它在泛型字段
ems您正在为字段寻找T类型(泛型类型),然后您希望限制T支持的类型。我更新了我的答案,请阅读我的答案的末尾,因为在C#中,指定泛型类型的支持类型有一些限制。还可以阅读aha,所以如果我对诸如where T:Struct之类的约束感到满意,那么它在泛型字段,c#,.net,vb.net,inheritance,C#,.net,Vb.net,Inheritance,ems您正在为字段寻找T类型(泛型类型),然后您希望限制T支持的类型。我更新了我的答案,请阅读我的答案的末尾,因为在C#中,指定泛型类型的支持类型有一些限制。还可以阅读aha,所以如果我对诸如where T:Struct之类的约束感到满意,那么它在泛型字段中是可行的(我不知道泛型字段是一种东西!),但是,由于我们不能施加更广泛的限制,这是不够的。您完全正确地认识到,我正在使用反射,如果没有反射,问题将不存在,因为我将有更多关于字段的信息。单元测试是一个好主意。谢谢! using System;
ems您正在为字段寻找T类型(泛型类型),然后您希望限制T支持的类型。我更新了我的答案,请阅读我的答案的末尾,因为在C#中,指定泛型类型的支持类型有一些限制。还可以阅读aha,所以如果我对诸如where T:Struct之类的约束感到满意,那么它在泛型字段中是可行的(我不知道泛型字段是一种东西!),但是,由于我们不能施加更广泛的限制,这是不够的。您完全正确地认识到,我正在使用反射,如果没有反射,问题将不存在,因为我将有更多关于字段的信息。单元测试是一个好主意。谢谢!
using System;
public class Program
{
public static void Main()
{
var b = new Book();
b.SetMyField(1);
Console.WriteLine(b.MyField);
b.SetMyField('A');
Console.WriteLine(b.MyField);
}
}
public interface IMySerializable {
object MyField { get; }
void SetMyField( int val);
void SetMyField( char val);
void SetMyField( byte val);
}
public class Book : IMySerializable {
public object MyField {
get;
private set;
}
public void SetMyField( int val){
MyField=val;
}
public void SetMyField( char val){
MyField=val;
}
public void SetMyField( byte val){
MyField=val;
}
}