C#高级编程笔记 Day 1, 2016年8月 30日 名词定义
1、C# 中的命名空间 namespace,我觉得和Java中的package 差不多,相当于一个"包" 一样。
2、修饰符 static 修饰方法表示方法不能在类的实例化上执行,因此不必先实例化再调用。
namespace XiYin{
public class TestStatic{
public static void Main(strig[] args){
int i=;
int j=getValue(i);
return ;
}
public static int getValue(int i){
return i+;
}
}
}
3、变量的初始化,C#中编译器需要用初始值对变量进行初始化。
C#中有两个方法可确保变量在使用前进行了初始化。
- 变量是类或结构中的字段,如果没有显式初始化,创建这些变量时其默认值就是 。
- 方法的局部变量必须在代码中显示初始化,之后才能在语句中使用它们的值。此时,初始化不是在声明该变量时进行的,但编译器会通过方法检查所有可能的路径。如果检测到局部变量在初始化前就使用了他们的值,就会产生错误。
4、const关键字指定一个变量为常量。
const int a=;
必须在声明时初始化。不能更改。而且总是静态的。(static)
5、C#中的数据类型: 分为 值类型 和引用类型
值类型: 直接存储值,一般存放在堆栈中。
引用类型:存储对值得引用,一般放在托管堆上。
6、如果变量是一个引用,就可以把其值设置为null,表示不引用任何对象。
7、C# 中的转义字符。
转义序列 | 字符 |
\' | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
\0 | 空 |
\a | 警告 |
\b | 退格 |
\f | 换页 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
8、C#中两种预定义的引用类型。
名称 | CTS类型 | 说明 |
object | System.Object | 根类型,CTS中的其他类型都是从它派生而来的(包括值类型) |
string | System.String | Unicode 字符串 |
9、string 类型: string 对象被分配在堆上,而不是栈上。当把一个字符串变量赋予另一个字符串时,会得到对内存中同一字符串的两个引用。字符串是不可改变的,修改其中一个字符串,就会创建一个全新的string 对象,而另一个字符串不发生任何改变。等到程序运行结束,垃圾回收器 (Garbage Collection)判断已经没有程序使用时,进行回收。释放。
string str1 = "";
string str2 = "";
string str3 = str2;
str1="";
10、为了避免有时在字符串中 字符的自动转义 。可在字符串前加 ” @ "
string filePath = @ "C:\ProCsharp\css" ;
11、【实用】编译 .cs 文件 成 .dll 文件的步骤过程。(在Windows 命令行中使用)
①、将 包含方法的 .cs 文件 比如 test.cs 文件编译为 test.dll 文件
csc /t :library test.cs
②然后再来一个 cs 比如 runtest.cs 这个是用来 调用之前 test.cs 中的方法。在第一步已经把其编译为 test.dll。 所以下面是把 runtest.cs 附件 test.dll 并运行即可得到结果。
csc runtest.cs /r: test.dll
12、【预处理指令】两条较有用的预处理指令。
#warning 和 #error ,当编译器遇到它们时,分别产生警告或错误 。 如果编译器遇到 #warning 指令, 会给用户显示 #warning 指令后面的文本。之后编译继续进行。如果遇到#error 指令,就会给用户显示后面的文本,作为一条编译错误信息。然后会立即退出编译,不会生成 IL代码。
13、【实用】给方法传递参数。(参数的传递)
参数可以通过引用或通过值传递给方法,在C#中,除非特别指定。所有的引用类型都是通过引用传递,所有的值类型都是通过值来传递。因为引用类型的变量只包含对象的引用,将要复制的正是这个引用,而不是对象本身,所以对底层对象的修改会保留下来。相反,值类型的对象包含的是实际数据,所以传递给方法的是数据本身的副本。例如:int 通过值传递给方法,对应方法对该int 的值所做的任何改变都没有改变原 int 对象的值。
14、ref 参数 和 out 参数
ref 参数:迫使值参数通过引用传递给方法。对变量改变都会影响原数据。
例子:
public static void SomeFunction(int[] ints,ref int i){
ints[]=;
i=;
}
在调用该方法时,添加 ref 关键字。
public static void Main(string[] args){
int[] a={,,};
int i=;
SomeFunction(a,ref i);
}
C#要求对传递给方法的参数进行初始化,在传递给方法之前,无论是按值传递,还是按引用传递,任何变量都必须初始化。但是 out 参数似乎可以解决这个。
out参数:可以使一个变量未初始化传入函数而在函数中进行初始化。
编译器使用 out关键字来初始化。在方法的输入参数前面加上 out 前缀时,传递给该方法的变量可以不初始化。改变量通过引用传递。所以在被调用的方法中返回时,对应方法对该变量的任何改变都会保留下来。
【总结:】
ref 和 out 关键字在运行时的处理方式不同,但在编译时的处理方式相同。因此,如果一个方法采用 ref 参数,而另一个方法采用 out 参数,则无法重载这两个方法。
class Test{
public void getName(ref int i){ }
public void getName(out int i){ }
}
从编译角度来看,这两个方法是完全相同的,所以不会进行重载。
但是下面这个可以。
class Test{
public void getName(int i){ }
public void getName(ref int i){ }
//public void getName(out int i){ } The same as up
}
C#高级编程笔记 Day 1, 2016年8月 30日 名词定义的更多相关文章
- 2016年12月30日 星期五 --出埃及记 Exodus 21:25
2016年12月30日 星期五 --出埃及记 Exodus 21:25 burn for burn, wound for wound, bruise for bruise.以烙还烙,以伤还伤,以打还打 ...
- 2016年11月30日 星期三 --出埃及记 Exodus 20:21
2016年11月30日 星期三 --出埃及记 Exodus 20:21 The people remained at a distance, while Moses approached the th ...
- 2016年10月30日 星期日 --出埃及记 Exodus 19:15
2016年10月30日 星期日 --出埃及记 Exodus 19:15 Then he said to the people, "Prepare yourselves for the thi ...
- 2016年6月30日 星期四 --出埃及记 Exodus 14:27
2016年6月30日 星期四 --出埃及记 Exodus 14:27 Moses stretched out his hand over the sea, and at daybreak the se ...
- 我的Python成长之路---第五天---Python基础(17)---2016年1月30日(晴)
常用模块 1.模块介绍 模块,用一砣代码实现了某个功能的代码集合. 模块分为三种 自定义模块 内置标准模块(又称标准库) 开源模块 2.常用模块 time模块 time.time() import t ...
- Java日志——2016年5月30日
1. 局部变量必须初始化,可以定义的同时初始化,也可以定义完成之后进行初始化. 2. Java7新特性:数字之间可以使用"_"连接,eg:23_44_5 = 23445,0B110 ...
- 2016年10月30日--JavaScript语法
1.基本数据类型:字符串.小数.整数.日期时间.布尔型等. 2.变量:[var]定义变量:var a:所有变量定义都用var定义,var是通用的可变类型. 3.类型转换:转为整数:parseInt() ...
- Ecshop 学习之路一 2016年6月30日
以前下载ecshop 都是在ecshop官网上下载,前后台模板都很难看.功能也不太齐全,这次在模板堂下载了ecshop 模板 仿小米的.做一个简单的电商网站. 页面结构还是挺简单的.功能也齐全.用ec ...
- 大陆地区OpenStack项目Core现状(截至2016年1月28日,转载自陈沙克日志)
陈沙克 经常有朋友问,大陆地区大概有多少位OpenStack项目的Core.这个问题,现在其实不太好回答,如果需要准确统计的话.下面仅仅是一个大概估计,有遗漏的,希望朋友指出,我来补全. 文档修改历史 ...
随机推荐
- 转: CvMat,Mat和IplImage之间的转化和拷贝
1.CvMat之间的复制 //注意:深拷贝 - 单独分配空间,两者相互独立 CvMat* a; CvMat* b = cvCloneMat(a); //copy a to b 2.Mat之间的复制 / ...
- WinForm------DockManager控件的使用方法(里面包含DockPanel控件)
1.在"引用"中添加DevExpress.XtraBars和DexExpress.XtraNavBar程序集 2.往工具栏拖出DockManager控件,点击右上角的小三角,再点击 ...
- ecshop登录
邮箱登录 a.找到function login(){} ,增加一个邮箱判断is_mail() , b.如果通过,增读取出username , c.再通过默认的login功能 1.需要修改文件incl ...
- centos 7.0 菜鸟接触命令 记录
centos 7.0 最小化安装 查看IP ip addr 查看外网IP curl ifconfig.me 重启 shutdown -r now 安装wget yum -y install wget ...
- Centos系统下邮件服务器的搭建
原文地址:http://lomu.me/post/linux-email-server
- Cucumber
http://www.ibm.com/developerworks/library/a-automating-ria/ Cucumber is a testing framework that hel ...
- Mongodb3.0.6副本集+分片学习笔记
一.使用问题记录 1. mongodb3.0.6使用mongostat参数 >./mongostat -h 127.0.0.1:27017 -u root -p 123456 /authenti ...
- asp.net core 笔记
dnvm use 1.0.0-rc1-final -r clr 切换版本
- PHP利用Curl实现多线程抓取网页和下载文件
PHP 利用 Curl 可以完成各种传送文件操作,比如模拟浏览器发送GET,POST请求等等,然而因为php语言本身不支持多线程,所以开发爬虫程序效率并不高,一般采集 数据可以利用 PHPquery ...
- 【转载】利用Unity自带的合图切割功能将合图切割成子图
虽然目前网上具有切割合图功能的工具不少,但大部分都是自动切割或者根据plist之类的合图文件切割的, 这种切割往往不可自己微调或者很难维调,导致效果不理想. 今天逛贴吧发现了一位网友写的切割合图插件很 ...