[C#高级编程]基础知识摘要一
核心C#:
值类型存储在堆栈中,而引用类型存储在托管堆上。
object类型可以用于两个目的:
可以使用object引用绑定任何子类型的对象
object类型执行许多一般用途的基本方法,包括Equals(), GetHashCode(), GetType()和ToString().
在C#中,switch语句的case子句的排放顺序是无关紧要的,甚至可以把default子句放在最前面,因此,任何两条case都不能相同,这包括值相同的不同常量。
foreach循环不能改变集合中各项的值.
Goto语句的限制:不能跳转到像for循环这样的代码块中,也不能跳出类的范围,不能退出try…catch块后面的finally块。
break用于退出判断(switch语句)或者循环(for, foreach, while等)语句,该语句会使控制流执行循环后面的语句。
continue语句也必须在循环中使用,但它只退出循环的当前迭代,开始执行循环的下一次迭代,而不是退出循环。
对象和类型:
结构和类的区别是它们在内存中的存储方式、访问方式(类是存储在堆上的引用类型,而结构是存储在栈上的值类型)和它们的一些特征(如结构不支持继承)。
参数可以是可选的,必须为可选参数提供默认值,且可选参数必须是方法定义的最后一个参数。
无参数的实例构造函数与静态构造函数可以在同一个类中同时定义,尽管参数列表相同,但这并不矛盾,因为在加载类时执行静态构造函数,而在创建实例时执行实例构造函数,所以何时执行哪个构造函数不会有冲突。
readonly关键字比const灵活得多,允许把一个字段设置为常量,但还需要执行一些计算,以确定它的初始值。其规则是可以在构造函数中给只读字段赋值,但不能在其他地方赋值。只读字段还可以是一个实例字段,而不是静态字段,类的每个实例可以有不同的值。
在构造函数中不必给只读字段赋值,如果没有赋值,它的值就是其特定数据类型的默认值,或者在声明时给它初始化的值。这适用于只读的静态字段和实例字段。
扩展方法允许改变一个类,但不需要该类的源代码。它是静态方法,是类的一部分,但实际上没有放在类的源代码中。对于扩展方法,第一个参数是要扩展的类型,放在this关键字后面。可以访问扩展类型的所有公有方法和属性。
继承:
实现继承:表示一个类型派生于一个基类型,拥有该基类的所有成员字段和函数。在实现继承中,派生类型采用基类型的每个函数的实现代码,除非在派生类型的定义中指定重写某个函数的实现代码。在需要给现有的类型添加功能,或许多相关的类型共享一组重要的公共功能时,这种类型的继承非常有用。
接口继承:表示一个类型只继承了函数的签名,没有继承任何实现代码。在需要指定该类型具有某些可用的特性时,最好使用这种类型的继承。
结构总是派生自System.ValueType, 它们还可以派生自任意多个接口
类总是派生自用户选择的另一个类,它们还可以派生自任意多个接口
把一个基类函数声明为virtual,就可以在任何派生类中重写该函数,也可以把属性声明为virtual,对于虚属性或重写属性,语法与非虚属性相同,但要在定义中添加关键字virtual:
class MyBaseClass
{
public virtual string VirtualMethod()
{
return "This method is virtual and defined in MyBaseClass";
}
}
在派生类的函数重写另一个函数时,要使用override关键字显示声明:
class MyDerivedClass: MyBaseClass
{
public override string VirtualMethod()
{
return " This method is an override defined in MyDerivedClass";
}
}
成员字段和静态函数都不能声明为virtual
如果签名相同的方法在基类和派生类中都进行了声明,但该方法没有分别声明为virtual 和 override,派生类方法会隐藏基类方法
可以使用base.<MethodName>()语法调用基类中的任何方法,不必从同一个方法的重载中调用它
抽象类不能实例化,抽象函数不能直接实现,必须在非抽象的派生类中重写
如果类包含抽象函数,则该类也是抽象的,也必须声明为抽象的:
abstract class Building
{
public abstract decimal calculateHeatingCost();
}
要在方法或属性上使用sealed关键字,必须先从基类上把它声明为要重写的方法或属性。如果基类上不希望有重写的方法或属性,就不要把它声明为virtual
构造函数的调用顺序是先调用System.Object,再按照层次结构由上向下进行,直到到达编译器要实例化的类为止。每个构造函数都初始化它自己的类中的字段。
base和this关键字是调用另一个构造函数时允许使用的唯一关键字,其他关键字都会产生编译错误。
接口仅表示其成员的存在性,类负责确定这些成员是虚拟还是抽象的。
接口引用的强大之处在于,它可以引用任何实现该接口的类。
[C#高级编程]基础知识摘要一的更多相关文章
- unix环境高级编程基础知识之第二篇(3)
看了unix环境高级编程第三章,把代码也都自己敲了一遍,另主要讲解了一些IO函数,read/write/fseek/fcntl:这里主要是c函数,比较容易,看多了就熟悉了.对fcntl函数讲解比较到位 ...
- unix环境高级编程基础知识之第一篇
陆陆续续看完了圣经第一章,熟悉了unix的整个编程流程,c语言的用处在这里得到伸张. 从unix的体系结构,原来操作系统包括内核及一些其他软件,我们常常误称为linux内核为操作系统,这俨然成为一种共 ...
- unix环境高级编程基础知识之第四章
1.从当前用户转到root用户:直接输入su命令,然后输入root密码,如果之前没有设置root命令密码会登陆不成功,这里需要命令sudo passwd命令设置密码,然后按照上面输入就成:从root命 ...
- SHELL脚本编程基础知识
SHELL脚本编程基础知识 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Linux之父Linus有一句话很经典:"Talk is cheap, show me the ...
- C#网络编程基础知识
C#网络编程基础知识一 1.IPAddress类 用于表示一个IP地址.IPAddress默认构造函数 public IPAddress(long address);一般不用 其中Parse()方法最 ...
- TCP与UDP比较 以及并发编程基础知识
一.tcp比udp真正可靠地原因 1.为什么tcp比udp传输可靠地原因: 我们知道在传输数据的时候,数据是先存在操作系统的缓存中,然后发送给客户端,在客户端也是要经过客户端的操作系统的,因为这个过程 ...
- linux高级编程基础系列:线程间通信
linux高级编程基础系列:线程间通信 转载:原文地址http://blog.163.com/jimking_2010/blog/static/1716015352013102510748824/ 线 ...
- 16第一章 ASP.Net编程基础知识
第一章 ASP.Net编程基础知识 第一章 ASP.Net编程基础知识 本章首先介绍用ASP.Net技术编制服务器端动态网页所需的网络和HTML标记语言方面的有关知识.然后 ...
- Jquery真的不难~第一回 编程基础知识
Jquery真的不难~第一回 编程基础知识 回到目录 前言 说Jquery之前,先来学习一下Javascript(以后简称为JS)语言中的基础知识问题,其时对于每种编程语言来说基础知识都是大同小异 ...
随机推荐
- webstorm 配合IIS使用
添加名称之后 点击apply 再点击ok 然后在打开设置 就可以配置下图的信息 我们需要在webstorm里面打开IIS部署的地址怎么设置呢? 技术交流QQ群:15129679
- Android定位&地图&导航——自定义公交路线代码
一.问题描述 基于百度地图实现检索指定城市指定公交的交通路线图,效果如图所示 二.通用组件Application类,主要创建并初始化BMapManager public class App exten ...
- OGG-03517 Conversion from character set failed解决方法
用goldengate同步oracle数据到mysql,由于一个字段某行数据的字段集的原因导致 replicat进程报 OGG-03517错 OGG-03517 Conversion from ch ...
- 准备开源一套异形UI控件
今天整理磁盘,发现在一个以前加密过的一个磁盘文件中发现了一些以前做的UI代码.平时都没怎么去用,放着放着只会慢慢的去遗忘,所以打算慢慢的将一些UI代码整理整理,然后开源出来,集合广大Delphier的 ...
- 绘制n边形:用两个以上的控件来控制矩形的颜色、大小、位置及空实心(程序代写)
绘制n边形:用两个以上的控件来控制矩形的颜色.大小.位置及空实心.(n由键盘输入) package lzy.di9zhang; import java.awt.BorderLayout;import ...
- Two classes have the same XML type name 排错【转】
今天遇到一个问题,webservice发布的时候报下面的错误: <strong>Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotati ...
- This application is currently offline. To enable the application, remove the app_offline.htm file from the application r
退出VS ,把程序中主目录里的app_offline.htm文件删除,重新启动VS 就可以了.
- SQL Server 几种锁的区别
NOLOCK(不加锁) 此选项被选中时,SQL Server 在读取或修改数据时不加任何锁. 在这种情况下,用户有可能读取到未完成事务(Uncommited Transaction)或回 ...
- PHP操作MongoDB学习(转)
1 mongodb启动时,设置启动项 C:\>mongodb\bin\mongod --config C:\mongodb.conf 其中mongodb.conf为: dbpath = ...
- Web 技术人员需知的 Web 缓存知识(转)
最近的译文距今已有4年之久,原文有一定的更新.今天踩着前辈们的肩膀,再次把这篇文章翻译整理下.一来让自己对web缓存的理解更深刻些,二来让大家注意力稍稍转移下,不要整天HTML5, 面试题啊叨啊叨的~ ...