C#学习感悟
上周虽然没上课,课上的内容是部分同学展示大作业成果,但是对于我来说,看了一些同学辛勤劳动的成果,听了他们对C#学习的一些感悟,我受益匪浅。
在这里我想谈谈我的收获。老师给的模板是todolist,但是绝不局限于todolist,很多同学都做的是备忘录,但是各有千秋,有的加入了优先级功能,即可以在备忘录中按照重要程度分类,这样可以筛选出重要的信息,将一些不重要的内容先隐藏什么的。还有一些同学做的是游戏,我感觉难度是相当大的。比如有的同学用到了游戏引擎,借助于其处理一些复杂的细节。于是我了解了一些C#中游戏引擎的开发问题,发现Unity3d在游戏开发中占据了很重要的地位,于是对这进行了一番了解。以下是我的一番见解。
一、委托
如果你熟悉C语言,并且向其他人描述委托,你一定会立刻想到“函数指针”。实际上,委托在某种程度上提供了间接的方法,即,不需要直接指定一个行为,而是将这个行为用某种方式“包含”在一个对象中。这个对象可以像其他任何对象那样使用。在该对象中,可以执行封装的行为。可以选择将委托类型看做只定义了一个方法的接口,将委托的实例看做实现了那个接口的一个对象。因此,委托必须满足4个条件:
- 声明委托类型;
- 必须有一个方法包含了要执行的代码;
- 必须创建一个委托实例;
- 必须调用委托实例。
二、值类型和引用类型
我这里就不具体说这两种类型,只说下这两个类型的差异:
- 对于值类型的表达式,它的值就是表达式的值,而对于引用类型的表达式,它的值是一个引用,而不是该引用所指代的对象。在存储方面,值类型变量总是存储在栈中,引用类型实例总是存储在堆中;
- 值类型不可以派生出其他类型。对于引用类型来说,每个对象的开头都包含一个数据块,它标识了对象的实际类型。并且永远都不能改变对象的类型—执行简单的强制类型转换时,运行时会获取一个引用,检查它引用的对象是不是目标类型的一个有效的对象。若果有效,就返回原始引用;否则抛出异常。引用本身并不知道对象的类型,所以同一个引用“值”可用于不同类型的多个变量。
知道了这两个差异后,就可以很好的理解装箱和拆箱了。如果我们不想用值类型的值,就是想用一个引用。C#提供了一个名为装箱的机制,它允许根据值类型来创建一个对象,然后使用对这个新对象的一个引用。
例如:
Int i= 5; |
这里有两个变量:i是值类型的变量,o是引用类型的变量。这里发生的事情就是装箱:运行时将在堆上创建一个包含值(5)的对象(它是一个普通对象)。o的值是对该新对象的一个引用。该对象的值是原始值的一个副本,改变i的值不会改变箱内的值。
第三行执行相反的操作—拆箱。必须告诉编译器将object拆箱成什么类型。如果使用错误的类型,就会抛出一个InvalidCastException异常。同样,拆箱也会复制箱内的值,在赋值之后,j和该对象之间不再有任何关系。
C#学习感悟的更多相关文章
- 20155226田皓宇关于优秀技能经验以及c语言学习感悟和对JAVA的展望
读老师文章后关于一项优秀技能的经验有感 1.首先我自我剖析认为,我是没有哪一个方面能做到强于身边90%的人的,我只能说有些方面略强于身边的人.比如唱歌.办公软件的应用(word.excel)等.但我不 ...
- imooc-c++学习感悟
imooc--慕课网c++课程链接:[课程链接](http://www.imooc.com/course/list?c=C+puls+puls) Imooc 慕课网c++学习感悟 1.课程名称:c++ ...
- C#与JAVA学习感悟
C#与JAVA学习感悟 学完C#与JAVA,感觉收获良多.C#与JAVA这两门语言相似度很高(了解它们早期历史的人可能知道为什么),也许很多人在学习JAVA(或C#)时会同时学习C#(或JAVA),因 ...
- 以小时候玩的贪吃蛇为例,对于Java图像界面的学习感悟
简介 正文 01.JFrame是啥? 02.JPanel 03. KeyListener 04.Runnable 05.游戏Running 06.游戏初始类编写 07.main 简介: 一直以来用代码 ...
- 深入理解Java虚拟机---学习感悟以及笔记
一.为什么要学习Java虚拟机? 这里我们使用举例来说明为什么要学习Java虚拟机,其实这个问题就和为什么要学习数据结构和算法是一个道理,工欲善其事,必先利其器.曾经的我经常害怕处理内存溢 ...
- Head First Python 1-4章学习感悟
一.学习知识总结 (1)迭代 range(起始值,结束值,步长):包含起始值,不包含结束值,步长为正数 (2)导入模块 from datetime import datetime (3 ...
- Python基础篇学习感悟:学如不及,犹恐失之
从2019年3月底开始学习Python,4月12日在CSDN发表第一篇博文,时至今日已有4个月零12天. 4个多月的学习,老猿从一个Python小白成长到今天,可以说对Python这门语言已经略知一二 ...
- Python学习感悟
学习任何新知识,我自己偏向于在实践中学习,这样效率更高:如果只是学习基本概念,会很枯燥. 现在的问题是:不是所有的新知识都可以在实践中学习!
- Python--Argparse学习感悟
笔者在https://docs.python.org/2/howto/argparse.html#id1上,学习到了argparse的基本概念和使用规范,学习过后忍不住将自己的一些体会和大家分享一下. ...
随机推荐
- DB2 runstats、reorgchk、reorg 命令
runstats.reorgchk.reorg 1.runstats runsats可以搜集表的信息,也可以搜集索引信息.作为runstats本身没有优化的功能,但是它更新了统计信息以后,可以让DB2 ...
- Finder Item脚本如何包装成 Mac App
第一步,包装 记得之前把一个 java 程序的 jar 包 用 automator包装成了 app, 但自己找不到做法了.回头我想了想 这么实验可行. 这样做成 app 后保存在 /Applicati ...
- Ueditor1.4.3.3+springMvc+maven 实现图片上传
前记:由于项目中需要有一个新增数据并且要能支持表格图片上传的功能.使用了ueditor控件.为实现这个功能,从一开始什么都看不懂,到一直连着弄了5天,总算是有了眉目.在此记录一下以便能帮到可以和我一样 ...
- 获取本机内存使用信息、DataTable占用内存空间
相当于windows系统中的任务管理器,功能是通过系统的API实现的本机的监视,代码如下 using System;using System.Collections.Generic;using Sys ...
- kafka java实例
生产者 package com; import java.util.Properties; import java.util.concurrent.TimeUnit; import kafka.jav ...
- hdu 1251 统计难题 (字典树入门题)
/******************************************************* 题目: 统计难题 (hdu 1251) 链接: http://acm.hdu.edu. ...
- mock测试框架Mockito
无论是敏捷开发.持续交付,还是测试驱动开发(TDD)都把单元测试作为实现的基石.随着这些先进的编程开发模式日益深入人心,单元测试如今显得越来越重要了.在敏捷开发.持续交付中要求单元测试一定要快(不能访 ...
- 获得URL含有中文出现乱码解决
如: http://www.htmlx.culub/?searchWord=工商代理 当获取链接中所对应searchWord的值时,出现 '%E5%B7%A5%E5%95%86%E4%BB%A3%E7 ...
- Asp.Net MVC4入门指南(6):验证编辑方法和编辑视图
在本节中,您将开始修改为电影控制器所新加的操作方法和视图.然后,您将添加一个自定义的搜索页. 在浏览器地址栏里追加/Movies, 浏览到Movies页面.并进入编辑(Edit)页面. Edit(编辑 ...
- ExtJs知识点概述
1.前言 ExtJS的前身是YUI(Yahoo User Interface).经过不断的发展与改进,ExtJS现在已经成功发布到了ExtJS 6版本,是一套目前最完整和最成熟的javascript基 ...