关于书籍《Learning hard C#学习笔记》,结合着菜鸟教程中的C#教程看,效果显著!
菜鸟教程是一个学习网站,链接:https://www.runoob.com/csharp/csharp-struct.html
第3章 C#语言基础
3.1 标识符和关键字
3.1.1 标识符
…
3.1.2 关键字
C#共102个关键字,如表3-1所示。
表3-1 C#的102个关键字
|
abstract |
as |
base |
bool |
break |
byte |
case |
|
catch |
char |
checked |
class |
const |
continue |
decimal |
|
default |
delegate |
do |
double |
else |
enum |
event |
|
explict |
extern |
false |
finally |
fixed |
float |
for |
|
foreach |
goto |
if |
implicit |
in |
int |
interface |
|
internal |
is |
lock |
long |
namespace |
new |
null |
|
object |
operator |
out |
override |
params |
private |
protected |
|
public |
readonly |
ref |
return |
sbyte |
sealed |
short |
|
sizeof |
stackalloc |
static |
string |
struct |
switch |
this |
|
throw |
true |
try |
typeof |
uint |
ulong |
unchecked |
|
unsafe |
ushort |
using |
virtual |
void |
volatile |
while |
|
add |
alias |
ascending |
async |
await |
descending |
dynamic |
|
from |
get |
global |
group |
into |
join |
let |
|
orderby |
partial |
remove |
select |
set |
value |
var |
|
where |
yield |
|
|
|
|
|
3.2 基础数据类型
公共语言运行时(CLR)包括通用类型系统(CTS)和公共语言规范(CLS)两部分。
通用类型系统又把类型分为两大类:值类型和引用类型。
C# 是基于 .NET 框架的语言,它定义了自己的数据类型,包括:数值类型、布尔类型、字符串类型、枚举类型、结构体类型和数组类型。
3.2.1 数值类型
分为 整型、浮点型和十进制型 3种。
3.2.2 布尔类型
存储布尔值true和false。
3.2.3 字符串类型
string(字符串)类型是System.String的别名,表示由零个或多个Unicode字符组成的不可变序列。可使用 “ []” 运算符访问string中的每个字符。
string类型为引用类型,string变量本身存储在栈里,而变量所指向的值则存储在托管堆里。
3.2.4 枚举类型
属于值类型,用于声明一组命名了的常数。
enum Gender
{
female ,
male,
num
}
3.2.5 结构体类型
是一种值类型,通常适用于表示诸如Point、Rectangle和Color等的轻量级对象。
C#结构体的特点,参考: https://www.runoob.com/csharp/csharp-struct.html
3.2.6 数组类型
是一种引用类型,它代表了相同元素的集合。
声明和初始化,语法:type[] array = new type[arrayCount];
3.3 变量和常量
3.3.1 变量的使用
数据类型 变量名
3.3.2 变量的作用域
变量的作用域指变量的使用范围,超出作用域后不能再对变量进行读取和赋值等操作。
string[] array = new string[6] { "Hi", ",", " we", " are", " friends", " !" };
//变量str的作用域
foreach (string str in array)//临时变量str 仅在foreach()循环体内可读可写,在循环体外则不可被使用
{
Console.Write(str);
}
Console.WriteLine();
Console.ReadKey();
3.3.3 常量
常量一旦被初始化就不能再次改变,C#中使用 const关键字进行定义,
语法:const 数据类型 常量名 = 与数据类型相对应的值;
注意点:
(1)因后续无法修改,所以必须在声明时就初始化;
(2)常量无法接受变量的赋值,即使变量是readonly(只读)也不可以;
(3)常量默认是静态的,不允许显式使用static关键字声明;
3.4 运算符和表达式
3.4.1 运算符
在C#中,运算符是用于操作一个或多个操作数的程序元素。接受一个操作数的运算符称为一元运算符,如 ++ --;二元运算符,如 + - * /;C#中唯一的三元运算符,? : 。
3.4.2 运算符优先级
只有三个优先级是从右至左结合的,一元、条件、赋值运算符。
3.4.3 运算符重载
运算符重载只能用于结构或类中,用关键字 operator 对运算符进行声明。
对于一元运算符,其重载方法需要带一个类或结构类型的变量作参数;而二元运算符重载则需要两个。
语法: public static 自定义结构体或类 operator 重载的运算符(类型1,类型2);
注意: 所有运算符重载的方法都是static的、public的; 并不是所有的运算符都可以重载。
例子:
(1)VS2015 新建一个class,名叫 Complex.cs,写如下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LanguageFoundation
{
//复数
class Complex
{
private int _real;//复数的实数部分
private int _imag;//复数的虚数部分
public int real //字段
{
get { return _real; }
set { _real = value; }
}
public int imag
{
get { return _imag; }
set { _imag = value; }
}
public Complex()//空构造函数
{ }
public Complex(int tmp1, int tmp2)//自定义构造函数
{
this.real = tmp1;
this.imag = tmp2;
}
public static Complex operator +(Complex num1, Complex num2)// + 号的重载
{
Complex re = new Complex();
re.real = num1.real + num2.real;
re.imag = num1.imag + num2.imag;
return re;
}
public override string ToString()//ToString()函数的重写 影响范围仅在本类实例中 不会影响正常的 ToString()发挥作用
{
return string.Format("{0},{1}i", real, imag);
}
}
}
(2) 在默认的Program.cs中写如下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LanguageFoundation
{
class Program
{
static void Main(string[] args)
{
//4 运算符重载
Complex num1 = new Complex(1, 2);
Complex num2 = new Complex(3, 4);
Complex re = num1 + num2;
Console.WriteLine("Complex num1 = " + num1.ToString());
Console.WriteLine("Complex num2 = " + num2.ToString());
Console.WriteLine("overloading + : num1 + num2 = " + re.ToString());
Console.ReadKey();
}
}
}
如何理解:static可修饰类、字段、属性、方法
参考链接:https://blog.csdn.net/nineleafclover/article/details/77964611
static在使用的时候分三种方法。
1.修饰类的时候:
将类修饰为静态的,意味着这个类不能实例化对象,在调用类里面的任何内容的时候直接用类名加点的形式调用其中的方法或者字段(类名.方法/类名.字段)
2.修饰方法或者属性的时候:
将方法修饰为静态方法,表示此方法为所在的类所有,而不是这个类实例化的对象所拥有,这个方法在调用的时候需要类名加点(类名.方法)来调用。
3.修饰变量:
表示在每次调用该变量的方法或者类的时候,变量的值为最后一次赋值时的值,而不是再次初始化它的值。
3.4.4 表达式
…
3.5 C#中的语句
C#语句包含:声明语句、条件语句、循环语句、跳转语句 和 异常语句等;
3.5.1 条件语句
if 、 switch
3.5.2 循环语句
while、do…while
for、foreach
foreach语句用于遍历数组或对象集合中的元素。但是并非所有的数组或对象集合都能使用foreach语句进行遍历,只有那些实现了System.Collections.IEnumerable和System.Collections.Generic.Ienumerable<T>接口的数组或对象集合才可以使用foreach语句。
3.5.3 跳转语句
break:直接退出整个循环
continue:立即终止本次循环,继续进行循环体中的下一次循环
goto:跳出循环到已标记好的位置(不推荐使用)
return:退出循环和循环所在的函数