撰写了文章 更新于 2020-02-08 11:21:38
从C#开始的编程入门——结构与基本类型
大家注意身体健康, 戴好口罩,勤洗手,多通风,人多别去凑热闹。
上一篇我们介绍了结构。
你可能觉得这些拥有关键字的基本类型,似乎有很高的特殊地位。
但实际上,像int、double、string这些内置基本类型,也是结构。
实际上int一类的关键字实际上是一些类型的别名。这些类型在运行时对于运行时环境来说都是具体的结构。回忆一开始我们介绍.NET平台的时候提到的,一些基本类型对于.NET平台的编程语言来说都是共通的,不同语言中的某些基本类型在编译后都会被映射到同一种类型。.NET平台是语言独立的(language independent)。而所有的.NET语言都拥有一些共同的基本类型,有这些基本类型的加持,可以让不同语言编写的库在编译后可以被其他语言的代码使用。这套类型类型被称为公共类型系统(Common Type System),其中一部分就是这些cs中有关键字的基本类型。下面的表格就给出了cs中一部分拥有关键字的基本类型和其对应的.NET结构类型。这些类型都位于System命名空间中。由于这些类型实际上和C#对应的关键字是等价的,如果你使用的是Visual Studio等IDE,可能会提示你把名称简化为较短的关键字。
C#类型关键字 | 对应类型 |
byte | Byte |
sbyte | SByte |
short | Int16 |
ushort | UInt16 |
int | Int32 |
uint | UInt32 |
long | Int64 |
ulong | UInt64 |
float | Single |
double | Double |
bool | Boolean |
char | Char |
string | String |
既然这些基本类型是结构,那么它们也有自己的各种成员。
下面我们介绍一些具体的、常用的成员。
静态成员
这里首先介绍一下静态成员。
前面介绍到的成员,都是每个实例各自有一份。但是如果某些成员对于一个类型所有的类型都是一样的,那么各自一份显然是浪费,静态成员就解决了这一点问题。
static关键字修饰的成员即为静态成员。对于实例来说,所有的实例都可以访问静态成员,并且对于所有实例都是共享的。static可以修饰字段、属性、方法、结构本身(此时的结构只允许包含静态成员),并且static关键字需要放在类型名称之前,访问修饰符之后。
另一方面,对于结构外部来说,可以直接通过结构名称访问静态成员,因为本身静态成员是独立于实例的,因此不需要实例即可访问。
struct BankAccount
{
public static double InterestRate {private set; get;} = 0.2;
public string Name { private set; get;}
public double Balance { private set; get;}
public static double CalculateInterest(double n)
{
return n * (1 + InterestRate);
}
}
参考上面的代码。利率InterestRate是一个静态字段(注意对于自动实现的属性可以直接在最后面初始化值)。而计算利息的方法CalculateInterest是一个静态方法,在内部的所有成员(即静态成员和实例成员)都可以访问静态成员。
在结构外部,需要指定结构名称,然后使用点儿访问。
System.Console.WriteLine(BankAccount.InterestRate);
既然静态成员是独立于实例的,那么静态方法也就自然无法访问实例成员。因为静态方法并没有绑定到某个具体的实例。也就是说在静态成员中,是无法使用this的。
C#的静态成员和C++的静态成员大体行为一致。不过C#的静态成员在结构外只能通过类型名称访问而无法通过具体实例访问。
数值类型
转换——Parse
在猜数游戏中提到的Parse方法实际上就是一个静态成员,通过类型名称直接访问。数值类型都有一个Parse方法,用于把字符串转换为对应类型。
int n = int.Parse(“1”);
double d = double.Parse(“1.2”);
最值
对于数值类型,可以获取到它们的最大值和最小值。
System.Console.WriteLine(int.MaxValue);
System.Console.WriteLine(double.MinValue);
字符串
大小写转换
可以把字符串转换为全部大写或者小写。
System.Console.WriteLine(s.ToUpper());
System.Console.WriteLine(s.ToLower());
长度
Length属性代表着字符串的长度。
System.Console.WriteLine(“abc”.Length); // 3
判断字符串的情况
IsNullOrEmmpty静态方法可以判断字符串是否为空。
System.Console.WriteLine(string.IsNullOrEmpty(“”));
Contains可以判断字符串的内容是否包含某个字符串或者字符。
System.Console.WriteLine(“123”.Contains(“1”));
拼接字符串
Concat静态方法可以拼接字符串
System.Console.WriteLine(string.Concat(“1”, “2”));
勤查文档
编程语言和各种软件、库大都有自己的参考文档。因为毕竟包含了大量的各种方法、类型,这是不可能在一篇文章一本书里介绍完的,并且时不时会发生改变。在遇到自己不熟悉的东西时,比如不知道有没有某个方法,或者某个方法应该怎么用,应当首先想到查询参考文档中有没有自己需要的。
你可能听说过MSDN,现在已经迁移到了Microsoft Docs,这里你可以查询到各种微软技术的参考文档。对于.NET平台标准库提供的各种方法和类型,可以在这里直接搜索。
下一篇文章,我们了解关于结构的重要的特性。
目录