C#高级编程笔记之第二章:核心C#
变量的初始化和作用域
初始化
C#有两个方法可以一确保变量在使用前进行了初始化:
- 变量是字段,如果没有显式初始化,创建这些变量时,其默认值为0。
- 方法的局部变量必须在代码中显式初始化,之后才能在语句中使用,如果在初始化之前使用了他的值,报错。
作用域
如果局部变量作用域冲突,报CS0136错。
字段与局部变量冲突,隐藏掉字段,访问被隐藏的实例字段用this关键字,静态字段使用object.fieldname。
常量
常量的特点:
- 常量必须在声明时初始化,指定其值后将不允许变更。
- 常量的值必须在编译时用于计算,不能从变量中提取值。
- 常量总是静态的,不允许使用static关键字进行修饰。
常量的优点:
- 易于阅读
- 易于修改
- 易于避免出错
预定义数据类型
值类型与引用类型
概念与存储方法的区别,参考第一章。
引用类型
要创建对象必须使用new关键字,将一个引用类型赋值给另一个引用类型得到的只是它的地址,会随着它的更改而更改。如:
Test x,y; x testX = new Test(); y testY = x; testX.value =; //这条语句执行后testX与testY的value属性的值都会为
CTS类型
C#认可的基本预定义类型并没有内置在C#中,而是内置于.NET Framework中。
decimal不是.NET Formework中内置类型,会造成性能损失。
bool类型不能用0来表示false,非0表示true。
所有内置类型都继承Object类型。
string 的不可变性:如上述代码中的testX和testY如果他们是string类型,当testX所指向的string改变时,会重新在托管堆中创建出一个新的string并指向它,testY所指向的值也就不会被更改。
流控制
条件语句
if ,else if,else。
switch语句
case语句的值必须要是常量表达式,不允许使用变量。
与C++的区别:激活了前一个case不会自动激活后一个case,且每一个case必须用break否则报错;可以把字符串作为测试变量。
可以使用goto "标签"经行跳转。
case为空则不需要break。
循环
for 与 while的区别:for适合可预测次数的循环,while适合不可预测次数的循环。
foreach
要实现foreach的遍历,类中就必须实现IEnumerable接口。
foreach中不能改变每一项的值。
跳转语句
goto
break
跳出当前循环
continue
跳过此次循环
return
退出当前方法
枚举
一旦代码编辑好,枚举就成为基本类型。
名称空间(命名空间)
与文件或组件不同,名称空间是一种逻辑组合,而不是物理组合。
一般名称空间可接受的格式为CompanyName.ProjectName.StstemSection。
名称空间别名的语法:
using slias = NamespaceName;
命名空间修饰符为 “::” 。
//using System;
using TestSystem = System;
namespace 命名空间别名
{
class Program
{
static void Main(string[] args)
{
TestSystem::Console.WriteLine("This is a C# Progam");
TestSystem.Console.ReadKey();
}
}
}
命名空间别名演示
预编译
#if #elif 支持一组逻辑运算符“!”、“==”、“!+”、“||”。
C#编程规则
标识符规则
- 可以包含数字字符,但是它们他们必须以字母或下划线开头。
- 不能使用C#关键字作标识符。
用户约定
规则应该是一个正确的决策,而不是一种束缚。
命名约定
Pascal:名称空间、类、函数名。
Camel:类中的字段(最好加“_”为前缀能更直观的知道这是个字段)、方法的参数。
名称风格
名称/命名的风格应当尽量保持一致。
命名空间的名称
命名空间是.NET区别共享程序集中对象名的唯一方法。
Microsoft建议使用如下名称空间:<CompanyName>.<TechnologyName>
名称和关键字
略
属性和方法的使用
如果该对象的外观像一个对象,就用属性来表示它,即:
- 客户端医改能读取它的值,最好不要使用只写属性。
- 读取该值不应该花他长时间。
- 不应有负面效应。
- 可以按任意顺序设置属性。
- 顺序读取属性也应该有相同的效果。
字段的用法
字段总应该是私有的。
本文部分摘录自C#高级编程第九版,其余由Earl Jones整理及总结而成,本人能力有限,如有纰漏望及时指出。
如果你喜欢此书,或想了解更详细内容,请购买正版书籍进行查阅。
转载请注明出处。
2016-05-07 22:29:18
C#高级编程笔记之第二章:核心C#的更多相关文章
- C#高级编程笔记之第一章:.NET体系结构
1.1 C#与.NET的关系 C#不能孤立地使用,必须与.NET Framework一起使用一起考虑. (1)C#的体系结构和方法论反映了.NET基础方法论. (2)多数情况下,C#的特定语言功能取决 ...
- ASP.NET MVC5 高级编程-学习日记-第二章 控制器
2.1 控制器的角色 MVC模式中的控制器(Controller)主要负责响应用户的输入,冰球在响应时修改模型(Model).通过这种方式,MVC模式中的控制器主要关注的是应用程序流.输入数据的处理, ...
- c#高级编程第七版 学习笔记 第二章 核心c#
第二章 核心C# 本章内容: 声明变量 变量的初始化和作用域 C#的预定义数据类型 在c#程序中使用条件语句.循环和跳转语句执行流 枚举 名称空间 Main()方法 基本的命令行c#编译器选项 使用S ...
- 读《C#高级编程》第1章问题
读<C#高级编程>第1章 .Net机构体系笔记 网红的话:爸爸说我将来会是一个牛逼的程序员,因为我有一个梦,虽然脑壳笨但是做事情很能坚持. 本章主要是了解.Net的结构,都是一些概念,并没 ...
- Python黑帽编程 2.0 第二章概述
Python黑帽编程 2.0 第二章概述 于 20世纪80年代末,Guido van Rossum发明了Python,初衷据说是为了打发圣诞节的无趣,1991年首次发布,是ABC语言的继承,同时也是一 ...
- C#高级编程9 第17章 使用VS2013-C#特性
C#高级编程9 第17章 使用VS2013 编辑定位到 如果默认勾选了这项,请去掉勾选,因为勾选之后解决方案的目录会根据当前文件选中. 可以设置项目并行生成数 版本控制软件设置 所有文本编辑器行号显示 ...
- Stealth视频教程学习笔记(第二章)
Stealth视频教程学习笔记(第二章) 本文是对Unity官方视频教程Stealth的学习笔记.在此之前,本人整理了Stealth视频的英文字幕,并放到了优酷上.本文将分别对各个视频进行学习总结,提 ...
- Android高级编程笔记(四)深入探讨Activity(转)
在应用程序中至少包含一个用来处理应用程序的主UI功能的主界面屏幕.这个主界面一般由多个Fragment组成,并由一组次要Activity支持.要在屏幕之间切换,就必须要启动一个新的Activity.一 ...
- C#高级编程9 第18章 部署
C#高级编程9 第18章 部署 使用 XCopy 进行部署 本主题演示如何通过将应用程序文件从一台计算机复制到另一台计算机来部署应用程序. 1.将项目中生成的程序集复制到目标计算机,生成的程序集位于项 ...
随机推荐
- leetcode 217 Contains Duplicate 数组中是否有重复的数字
Contains Duplicate Total Accepted: 26477 Total Submissions: 73478 My Submissions Given an array o ...
- Socket编程实践(9) --套接字IO超时设置方法
引:超时设置3种方案 1. alarm超时设置方法 //代码实现: 这种方式较少用 void sigHandlerForSigAlrm(int signo) { return ; } signal(S ...
- #include <iostream>与#include <iostream.h>的区别
在新的C++标准中,生成新头文件的方法仅仅是将现有C++头文件名中的 .h 去掉.例如,<iostream.h> 变成了<iostream> ,<complex. ...
- linux:你不知道的echo
linux的echo命令功能是在显示器上显示一段文字.一般格式为: echo [ -n ] 字符串.参数n是指行尾不换行 echo会将输入的字符串送往标准输出.输出的字符串间以空白字符隔开, 并在最后 ...
- 朴素贝叶斯分类法 Naive Bayes ---R
朴素贝叶斯算法 [转载时请注明来源]:http://www.cnblogs.com/runner-ljt/ Ljt 勿忘初心 无畏未来 作为一个初学者,水平有限,欢迎交流指正. 朴素贝叶斯分类法 ...
- JavaScript进阶(一)抽离公共函数
JS抽离公共函数 问题 在经历了"大量"的项目开发后,发觉越来越多的方法可以被抽离出来作为一个公共方法使用.那么,在js中该思想又该如何实现呢? 解答 例如,以下方法用于实现将标准 ...
- JavaScript进阶(十一)JsJava2.0版本
JavaScript进阶(十一)JsJava2.0版本 2007年9月11日,JsJava团队发布了JsJava2.0版本,该版本不仅增加了许多新的类库,而且参照J2SE1.4,大量使用了类的继承和实 ...
- java的参数传递与内存分配问题
本文可作为北京尚学堂java课程的学习笔记. 看下面这段代码. class BirthDate { private int day; private int month; private int ye ...
- 基于ARM_contexA9 led驱动编程
关于友善之臂出的这款contexA9开发板,目前在网络上的资源较少,特别是内核的,非常之少,鉴于这种情况,我将会写一个系列的驱动来做关于tiny4412这款板子开发的总结. 简单介绍一下: Tiny4 ...
- RTMPdump(libRTMP) 源代码分析 10: 处理各种消息(Message)
===================================================== RTMPdump(libRTMP) 源代码分析系列文章: RTMPdump 源代码分析 1: ...