C#中的where泛型约束介绍
时间:2022-11-26 12:21:34
泛型约束的意思就是说:类的泛型,只能是where字句后面所写的接口或类。
这么说好像也有点不大明白,举个例子。
我有一个接口,如下:
///
/// 国籍的接口
///
public interface INationality
{
string Nationality
{
set;
get;
}
string GetNationality();
}
然后该接口有两个实现,如下:
///
/// 中国人
///
public class Chinese : INationality
{
private string _Nationality;
public string Nationality
{
set
{
_Nationality = value;
}
}
public string GetNationality()
{
return string.IsNullOrEmpty(_Nationality) ? "Default." : _Nationality;
}
}
///
/// 美国人
///
public class American : INationality
{
private string _Nationality;
public string Nationality
{
set { _Nationality = value; }
}
public string GetNationality()
{
return string.IsNullOrEmpty(_Nationality) ? "Default." : _Nationality;
}
}
然后创建一个泛型类,带有泛型约束的类,如下:
///
///
///
///
public class PrintNationality where T : INationality, new()
{
T item = new T();
public void Print()
{
Console.WriteLine(string.Format("Nationality:{0}", item.GetNationality()));
}
}
由于有where字句的泛型约束,所以,创建PrintNationality的对象时,T的类型只能是继承子INationality接口的类。
public class Program
{
static void Main(string[] args)
{
PrintNationality _c = new PrintNationality();
PrintNationality _a = new PrintNationality();
//PrintNationality _o = new PrintNationality(); 此句是错误的,因为泛型类型必须是继承自INationality接口的类
_c.Print();
_a.Print();
Console.ReadKey();
}
}
以上的代码运行结果:
标签:where,泛型约束
0
投稿
猜你喜欢
Android SQLite数据库增删改查操作的案例分析
2022-06-06 02:55:03
Java中通过Class类获取Class对象的方法详解
2021-11-09 17:12:57
java多线程并发中使用Lockers类将多线程共享资源锁定
2021-11-14 11:08:37
C#实现窗体全屏的两种方法
2021-10-06 19:14:04
Android.bp语法和使用方法讲解
2022-09-29 19:31:19
SpringBoot外部化配置使用Plus版的方法示例
2022-12-21 01:03:46
Java实现选择排序
2021-06-30 16:53:55
Java中MessageDigest来实现数据加密的方法
2023-05-18 01:13:49
spring boot springMVC扩展配置实现解析
2023-11-25 10:32:53
JVM之方法返回地址详解
2022-05-02 07:58:27
深入浅析jni中的java接口使用
2023-07-22 19:54:23
Android SDK Manager解决更新时的问题 :Failed to fetch URL...
2023-03-17 23:23:36
Android应用内悬浮窗Activity的简单实现
2023-07-28 04:03:00
Java实现TopK问题的方法
2023-11-10 20:32:14
java链式创建json对象的实现
2023-11-12 12:36:51
使用注解解决ShardingJdbc不支持复杂SQL方法
2022-08-03 02:15:12
Java多线程下的单例模式参考
2023-11-09 00:40:15
关于Java float和double精度范围大小
2023-11-29 00:52:01
C#获取汉字字符串拼音首字母的方法
2022-09-06 14:01:12
Android中监听未接来电的2种方法
2023-11-02 10:44:48