所有应用程序都要处理数据。数据都是先输入,再处理,最后输出。数据通常来自文件、数据库或者用户输入,可以放入临时变量中,这些变量存储再运行程序的内存中。当使用变量时,首先应该考虑它在内存中占了多少空间,其次考虑它的处理速度有多快。
变量可选择合适的类型来控制,可以将简单的常用类型(如int double)视为不同大小的存储盒,其中较小的的变量占的内存较小,但处理速度可能没那么块。
一、变量的命名和赋值
事物都有命名约定,最好遵循这些约定
命名约定 | 实例 | 使用场合 |
---|---|---|
驼峰样式 | cost ,orderDetail,dateOfBirth | 局部变量、私有字段 |
标题样式 | String,Int32,Cost | 类型、非私有字段以及其他成员(如方法) |
字面值
再给变量赋值时,赋予的经常(但不总是)字面值,什么是字面值呢,字面值是表示固定值得符号。
二、存储文本
对于一些文本,比如单个字母(如A),可存储为char类型,并在字面值的两边使用单引号来赋值,也可以直接赋予函数调用的返回值,如下所示:
char letter='A';
char dight='1';
char symbol='$';
char userChoice=GetKeystroke();
private static char GetKeystroke()
{
return 'S';
}
对于另外一些文本,比如多个字母(如Bob),可存储为字符串类型,并在字面值的两边使用双引号进行赋值,同时可也直接赋予为函数调用的返回值,如下所示:
string firstNmae="Bob";
=string lastName="Smith";
string phoneNumber="(215)555-4256";
string address=GetAddressFromDatabase(id:563);
private static string GetAddressFromDatabase(int id)
{
return "Bei jing Chang Ping Bei qi jia";
}
理解逐字字符串
在字符串变量中存储文本时,可以包括转义序列,转义序列使用反斜杠表示特殊字符,如制表符和新行,如下所示:
string fullNameWithTabSeparator="Bob\tSmith";
//但是如果要将路径存储到文件中,并且路径中有文件夹的名称以t开头,如下所示:
string filePaht="C:\televisions\sony\bravia.txt";
//编译器就会把\t转换成制表符,这显然是错误的,解决办法时逐字符串必须加上@符号作为前缀,如下所示:
string filePathTwo=@"c:\televisions\sony\bravia.txt";
1)字面字符串:用双引号括起来的一些字符。它们可以使用转义字符\t作为制表符。
2)逐字字符串:以@为前缀的字面字符串,以禁用转义字符,因此反斜杠就是反斜杠。
3)内插字符串:以$为前缀的字面字符串,以支持嵌入式的格式化变量。
三、存储数字
数字时细微进行算术计算的数据,例如,电话号码不是数字。要决定是否应该将变量存储为数字,请考虑是需要对数字执行算术运算,还是数据应包含圆括号或连字符等非数字字符。以便将数字格式化为(414)555-1234. 在本例中,数字是字符序列,因此应该存储为字符串。
int integerNumber=-23;
float realNumber=2.3F;
double anotherRealNumber=2.3;
四、存储布尔值
布尔值只能是如下两个字面值中的一个:true 或false。常用于分支和循环。
bool result1=true;
bool result2=false;
五、存储任意类型的对象
object类型,这种类型可以存储任何数据,但这种灵活性是以混乱的代码和可能较差的性能为代价的。由于这两个原因,你应该尽可能避免使用object类型。
object height=1.88;
object name="Amir";
Console.WriteLine($"{name}is{height}metrestall.");
int length1=name.Length;
int length2=((string)name).Length;
Console.WriteLine($"{name}has{length2}characters.");
Console.WriteLine("HelloWorld!");
object类型自从C#的第一个版本就已经可用了,但是C#2.0及其后期版本有了更好的选择——泛型,泛型可提供我们想要的灵活性,但没有性能开销。
六、动态存储类型
还有一种特殊类型名为dynamic,可用于存储任何类型的数据,并且灵活性相比object类型更强,代价是性能下降了。dynamic关键字是在C#4.0中引入的。但是,与object变量不同的是,存储在dynamic变量中的值可以在没用显示进行强制转换的情况下调用成员。
dynamic anotherName = "Ahmed";