C# 泛型约束 xxx<T> Where T:约束(一)

发现我们游戏的代码中,主程写了很多类似这样的代码:

public static T CreateObject<T>(out int objectId) where T : new() //方法名

public class CSingleton<T> where T : new() //单例类

public T GetControl<T>(string uri, Transform findTrans = null, bool isLog = true) where T : UnityEngine.Object //根据 url和Type 查找UI控件

public T FindControl<T>(string name) where T : Component

public void OpenWindow<T>(params object[] args) where T : CUIBase

public void CallUI<T>(Action<T, object[]> callback, params object[] args) where T : CUIBase

public void LoadTab<T>(string tabPath) where T : CBaseInfo, new() //加载Tab表

----- 具体使用  -----

定义:public T GetInfo<T>(string id) where T : CBaseInfo

使用:ActorInfo actorInfo = CGameSettings.Instance.GetInfo<ActorInfo>(actorId);

解释:[T GetInfo(String id)]传入一个 ID 返回一个Class ,[where T:CBaseInfo]约束这个Class的Type 必须 继承之 CBaseInfo

当然项目中一些插件也是有类似的写法:

FingerGestures

public abstract class ContinuousGestureRecognizer<T> : GestureRecognizerTS<T> where T : ContinuousGesture, new()

public static T CreateAsset<T>() where T : ScriptableObject

public abstract class FingerEventDetector<T> : FingerEventDetector where T : FingerEvent, new()

NGUI

static public T[] FindActive<T> () where T : Component

static public T AddChild<T> (GameObject parent, bool undo) where T : Component

static public T Begin<T> (GameObject go, float duration) where T : UITweener

TK2D

public static T LoadResourceByName<T>(string guid) where T : UnityEngine.Object

public static T AddComponent<T>(GameObject go, tk2dSpriteCollectionData spriteCollection, string spriteName) where T : tk2dBaseSprite

C# 泛型约束 xxx<T> Where T:约束(一)

时间: 2024-11-04 03:11:28

C# 泛型约束 xxx<T> Where T:约束(一)的相关文章

C# 泛型约束 xxx Where T:约束(二)

接着上篇的,通过以上的具体使用实例: 所谓泛型,即通过参数化类型来实现在同一份代码上操作多种数据类型,泛型编程是一种编程范式,它利用"参数化类型"将类型抽象化,从而实现更为灵活的复用. 在定义泛型类时,可以对客户端代码能够在实例化类时用于类型参数的类型种类施加限制.如果客户端代码尝试使用某个约束所不允许的类型来实例化类,则会产生编译时错误.这些限制称为约束.约束是使用 where 上下文关键字指定的. 下表列出了五种类型的约束: 约束 说明 T:struct 类型参数必须是值类型.可以

sql数据库删除表的外键约束(INSERT 语句与 FOREIGN KEY 约束&quot;XXX&quot;冲突。该冲突发生于数据库&quot;XXX&quot;,表&quot;XXX&quot;, column &#39;XXX)

使用如下SQL语句查询出表中外键约束名称: 1 select name 2 from sys.foreign_key_columns f join sys.objects o on f.constraint_object_id=o.object_id 3 where f.parent_object_id=object_id('表名') 执行如下SQL语句删除即可. 1 alter table 表名 drop constraint 外键约束名 sql数据库删除表的外键约束(INSERT 语句与 F

SQL CREATE TABLE 语句\SQL 约束 (Constraints)\SQL NOT NULL 约束\SQL UNIQUE 约束

CREATE TABLE 语句 CREATE TABLE 语句用于创建数据库中的表. SQL CREATE TABLE 语法 CREATE TABLE 表名称 ( 列名称1 数据类型, 列名称2 数据类型, 列名称3 数据类型, .... ) 数据类型(data_type)规定了列可容纳何种数据类型.下面的表格包含了SQL中最常用的数据类型: 数据类型 描述 integer(size) int(size) smallint(size) tinyint(size) 仅容纳整数.在括号内规定数字的最

Oracle 关于定义约束 / 修改表结构 /修改约束

---约束分5种:主键 外键 唯一 非空 检查5类约束 Oracle中分列级别约束 与 表级别约束 列级别约束:在创建表时再列上面加约束 例如: create table table11( stuno number(2) constraint table_pk primary key, tname varchar2(5)unique--唯一约束 ) 上面两个字段都是在列上面直接写的约束 :可选[constraint table_pk] primary key, 表级别约束: 例如: --表级别约

MYSQL约束 -- not null 非空约束

2.not null 非空约束 用于确保当前列的值不为空:在创建表时,如果不指定是否可以为空,字段默认可以为NULL. -- 这是上一篇默认约束创建的表 CREATE TABLE `test`.`user`( `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'id', `name` VARCHAR(225) NOT NULL COMMENT '姓名', -- 这里添加了NOT NULL `sex` TINYINT(1) DEFAULT 1 COMMENT

C# 泛型多种参数类型与多重约束 示例

1 2 3 4 5 6 7 8 9 10 11 12 interface IMyInterface { } class Dictionary<TKey, TVal>     where TKey : IComparable, IEnumerable     where TVal : IMyInterface {     public void Add(TKey key, TVal val)     {     } }

SQL语句创建数据库,SQL语句删除数据库,SQL语句创建表,SQL语句删除表,SQL语句添加约束,SQL语句删除约束

创建数据库: 1 CREATE DATABASE Test --要创建的数据库名称 2 ON PRIMARY 3 ( 4 --数据库文件的具体描述 5 NAME='Test_data', --主数据文件的逻辑名称 6 FILENAME='E:\project\Test_data.mdf', --主数据文件的物理名称 7 SIZE=5MB, --主数据文件的初始大小 8 MAXSIZE=100MB, --主数据文件的增长的最大值 9 FILEGROWTH=15% --主数据文件的增长率 10 )

数据库的实现(创建库、表、约束;删除表、约束)

SQLServer数据库的基础知识的回顾 1)主数据文件:*.mdf 2)次要数据文件:*.ndf 3)日志文件:*.ldf 每个数据库至少要包含两个文件:一个数据文件和一个日志文件 如何查看SQL Server的帮助==================快捷键F1 一.创建数据库 1.语法 1 create database 数据库名 2 on primary 3 ( 4 <数据文件参数>[,......n] [<文件组参数>] 5 ) 6 log on 7 ( 8 {<日志

FPGA基础知识7(从芯片手册获取参数FPGA时序约束--“CMOS Sensor接口时序约束”)

需求说明:FPGA基本知识 内容       :如何确定时序约束数值 来自       :时间的诗 来源:http://www.61ic.com/Technology/embed/201304/48186.html FPGA工程的功能框图如图所示.上电初始,FPGA需要通过IIC接口协议对摄像头模块进行寄存器初始化配置.这个初始化的基本参数,如初始化地址和数据存储在一个预先配置好的FPGA内嵌ROM中.在初始化配置完成后,摄像头就能够持续输出RGB标准的视频数据流,FPGA通过对其相应的时钟.行