6.18上课以及作业感悟
2014-06-22 15:58
260 查看
1.泛型
泛型将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候
使用泛型可以最大限度地重用代码,保护类型的安全以及调高性能
可以创建泛型接口、泛型类、泛型方法
使用方式如下所示:
DemoGeneric<int> demo = new DemoGeneric<int> ();
如果实例化泛型类型的参数相同,那么JIT编译器会重复使用该类型
C#的泛型采用“基类,接口,构造器,值类型/引用类型”的约束方式来实现对类型能数的“显式约束”
委托是事件的基础。
必须使用具有兼容返回类型和输入参数的方法或lambda表达式实例化委托。
通过将委托与命名方法或匿名方法关联,可以实例化委托。
泛型委托支持在委托返回值和参数上应用参数类型,这些参数类型同样可以附带合法的约束。
如:
delegateboolPredicate<T>(T value); class x { staticbool
F(inti){..} staticbool
G(strings){..} static void Main() { Predicate<string> p2= G; Predicate<int> p1 = newPredicate<int>(F); } }
2.Lambda表达式
Lambda表达式是一种可用于创建委托或表达式目录树类型的匿名函数。 通过使用lambda表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。
Lambda表达式对于编写LINQ查询表达式特别有用。
若要创建Lambda表达式,需要在Lambda运算符=>左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。
例如,lambda表达式x => x * x指定名为x的参数并返回x的平方值。
仅当lambda只有一个输入参数时,括号才是可选的;否则括号是必需的。括号内的两个或更多输入参数使用逗号加以分隔
Func<T,TResult>委托:T为参数类型,TResult为返回值类型
Lambda表达式树:详情参照
http://msdn.microsoft.com/zh-cn/library/bb397951.aspx
3.LINQ
LINQ,语言集成查询(Language Integrated Query)是一组用于c#和Visual
Basic语言的扩展。它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据
亦可对数组、List等进行操作
例如:
var result = from a in db.table
where a.id == 1
order by a.id
select a;
var result1 = from a in array
where a>3
select a;
3.在完成编程作业解决问题时补充的知识
关于泛型的静态成员问题:
其中使用类型参数的构造类型,比如List<T>被称为开放构造类型(open constructed type)
而不使用类型参数的构造类型,例如List<int>被称为封闭构造类型(closed constructed type)。
特别要强调的是不同类型参数的封闭构造类型之间是不共享静态成员变量的。
List的元素添加问题
在添加元素之前,List并没有对内容进行复制,它只是保存了元素的地址。所以,若List添加一个元素后,直接对元素进行修改并重新添加,就会把前面已经添加的元素都一起修改了,就会出现添加后元素个数仍然增加但元素却都变一样的状况。解决方法很简单,只要每次添加元素,都保证那元素师师new出来的,而不是沿用之前的即可。
泛型将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候
使用泛型可以最大限度地重用代码,保护类型的安全以及调高性能
可以创建泛型接口、泛型类、泛型方法
使用方式如下所示:
DemoGeneric<int> demo = new DemoGeneric<int> ();
如果实例化泛型类型的参数相同,那么JIT编译器会重复使用该类型
C#的泛型采用“基类,接口,构造器,值类型/引用类型”的约束方式来实现对类型能数的“显式约束”
委托是事件的基础。
必须使用具有兼容返回类型和输入参数的方法或lambda表达式实例化委托。
通过将委托与命名方法或匿名方法关联,可以实例化委托。
泛型委托支持在委托返回值和参数上应用参数类型,这些参数类型同样可以附带合法的约束。
如:
delegateboolPredicate<T>(T value); class x { staticbool
F(inti){..} staticbool
G(strings){..} static void Main() { Predicate<string> p2= G; Predicate<int> p1 = newPredicate<int>(F); } }
2.Lambda表达式
Lambda表达式是一种可用于创建委托或表达式目录树类型的匿名函数。 通过使用lambda表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。
Lambda表达式对于编写LINQ查询表达式特别有用。
若要创建Lambda表达式,需要在Lambda运算符=>左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。
例如,lambda表达式x => x * x指定名为x的参数并返回x的平方值。
仅当lambda只有一个输入参数时,括号才是可选的;否则括号是必需的。括号内的两个或更多输入参数使用逗号加以分隔
Func<T,TResult>委托:T为参数类型,TResult为返回值类型
Lambda表达式树:详情参照
http://msdn.microsoft.com/zh-cn/library/bb397951.aspx
3.LINQ
LINQ,语言集成查询(Language Integrated Query)是一组用于c#和Visual
Basic语言的扩展。它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据
亦可对数组、List等进行操作
例如:
var result = from a in db.table
where a.id == 1
order by a.id
select a;
var result1 = from a in array
where a>3
select a;
3.在完成编程作业解决问题时补充的知识
关于泛型的静态成员问题:
其中使用类型参数的构造类型,比如List<T>被称为开放构造类型(open constructed type)
而不使用类型参数的构造类型,例如List<int>被称为封闭构造类型(closed constructed type)。
特别要强调的是不同类型参数的封闭构造类型之间是不共享静态成员变量的。
List的元素添加问题
在添加元素之前,List并没有对内容进行复制,它只是保存了元素的地址。所以,若List添加一个元素后,直接对元素进行修改并重新添加,就会把前面已经添加的元素都一起修改了,就会出现添加后元素个数仍然增加但元素却都变一样的状况。解决方法很简单,只要每次添加元素,都保证那元素师师new出来的,而不是沿用之前的即可。
相关文章推荐
- 作业以及感悟
- SQL2008创建定时作业以及常见问题
- Github的使用以及Git的简单入门 - 课程作业三
- 电商概论上课笔记-作业二
- linux 进程(调度通信)以及作业
- 作业感悟
- 第三周作业(一):安装VS以及创建单元测试
- Cocos 2d-X Lua游戏开发Mac环境搭建以及一点点感悟
- JAVA 接口与继承作业——动手动脑以及课后实验性问题
- 8.9上课感悟
- 明天上课了,作业还没有做呢?
- 预备作业:有关技能以及“做中学”
- 20155226田皓宇关于优秀技能经验以及c语言学习感悟和对JAVA的展望
- 信息检索:对搜索引擎性能的评价指标的小作业---pooling方法以及MAP value的计算
- 专业工具软件作业以及补充资料等说明
- 2016-2017-2点集拓扑作业[研究生上课时]讲解视频
- 11-13 (今天老师上课讲的内容和老师留的作业都在上面)
- 读软件工程这本书的感悟(第一次作业)
- 关于cs231n中作业1的SVM和Softmax线性分类器实现的感悟
- 从决策树到RF,以及boosting Adaboost到GBDT算感悟