在上篇文章中,你跟着我写了一个HelloWorld,本篇中,我们来谈谈一些C#程序中的小概念

1、C# 程序结构

一个 C# 程序主要包括以下部分:

  • 命名空间声明(Namespace declaration)
  • 一个类(class)
  • Class 方法
  • Class 属性
  • 一个 Main(主)方法
  • 语句(Statements)& 表达式(Expressions)
  • 注释

我们把上一篇的代码添出来

 1 using System;
2
3 namespace HelloWorld
4 {
5 class Program
6 {
7 static void Main(string[] args)
8 {
9 Console.Write("HelloWorld");
10 Console.Read();
11 }
12 }
13 }

程序的第1行 using System; - using 关键字用于在程序中包含 System 命名空间。 一个程序一般有多个 using 语句

下一行namespace HelloWorld - namespace关键字用于申明命名空间,一个命名空间里有多个类。本代码中,表示一个为HelloWorld的命名空间

下一行class Program - class关键字用于申明一个类,类 Program 包含了程序使用的数据和方法声明。类一般包含多个方法。方法定义了类的行为。在这里,Program 类只有一个 Main 方法。

下一行定义了 Main 方法,是所有 C# 程序的 入口点。Main 方法说明当执行时 类将做什么动作。

注释是用于解释代码。编译器会忽略注释的条目。在 C# 程序中,多行注释以 /* 开始,并以字符 */ 终止,如下所示:

/* 这是C#中
的多行注释的
演示 */

单行注释是用 '//' 符号表示。例如:

//这是C#中的单行注释的演示 

2、标识符

标识符是用来识别类、变量、函数或任何其它用户定义的项目。在 C# 中,类的命名必须遵循如下基本规则:

  • 标识符必须以字母、下划线或 @ 开头,后面可以跟一系列的字母、数字( 0 - 9 )、下划线( _ )、@。
  • 标识符中的第一个字符不能是数字。
  • 标识符必须不包含任何嵌入的空格或符号,比如 ? - +! # % ^ & * ( ) [ ] { } . ; : " ' / \。
  • 标识符不能是 C# 关键字。除非它们有一个 @ 前缀。 例如,@if 是有效的标识符,但 if 不是,因为 if 是关键字。
  • 标识符必须区分大小写。大写字母和小写字母被认为是不同的字母。
  • 不能与C#的类库名称相同。

3、C# 关键字

关键字是 C# 编译器预定义的保留字。这些关键字不能用作标识符,但是,如果您想使用这些关键字作为标识符,可以在关键字前面加上 @ 字符作为前缀。
在 C# 中,有些标识符在代码的上下文中有特殊的意义,如 get 和 set,这些被称为上下文关键字(contextual keywords)。
下表列出了 C# 中的保留关键字(Reserved Keywords)和上下文关键字(Contextual Keywords):

保留关键字

上下文关键字

详见:https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/

4、C# 数据类型

C#是一种强类型语言。 每个变量和常量都有一个类型,每个计算为值的表达式也是如此,每个方法签名为每个输入参数和返回值指定一个类型。所有的类型都是继承自System.Object

C#的数据类型有三种:

  • 值类型(Value types)
  • 引用类型(Reference types)
  • 指针类型(Pointer types)

在不安全的代码里才会用到指针类型,本系列不介绍。你仅要知道,指针类型不从 object 继承,并且指针类型与 object 之间不存在转换。 此外,装箱和取消装箱不支持指针。 但是,你可在不同的指针类型之间以及指针类型和整型之间进行转换。(这句话记不住也没有关系,这个类型在绝大部分的工作中都用不上,个人认为,这个类型就是为了给c++程序员用的,个人观点不喜勿喷!)。后面我们也会有单独的章节去讲,这里你不必太纠结,心里有这些概念就行了。

详见:https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/types

5、C# 变量

一个变量只不过是一个供程序操作的存储区的名字。在 C# 中,每个变量都有一个特定的类型,类型决定了变量的内存大小和布局。范围内的值可以存储在内存中,可以对变量进行一系列操作。

C# 中变量定义的语法:

<data_type> <variable_list>;

在这里,data_type 必须是一个有效的 C# 数据类型,可以是 char、int、float、double 或其他用户自定义的数据类型。variable_list 可以由一个或多个用逗号分隔的标识符名称组成。

定义变量示例:

int i,j;
char c;
string mrbug;

变量通过在等号后跟一个常量表达式进行初始化(又叫赋值)。初始化的一般形式为:

<data_type> <variable_name> = value;

一些示例:

int i = 0 , j = 100; //初始化 i 和 j

string myname = "mrbug" ; //初始化myname

定义变量时就为这个变量赋一个初始值,是一个良好的编码习惯

6、C# 常量

顾名思意常量是固定值,程序执行期间不会改变。常量可以是任何基本数据类型,比如整数常量、浮点常量、字符常量或者字符串常量,还有枚举常量。
常量可以被当作常规的变量,只是它们的值在定义后不能被修改。在C#中,常量以下面的形式定义:

const <data_type> <constant_name> = value;

定义常量示例:

const double pi = 3.1415926; // 常量声明

详见:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/constants

7、C# 中的 Lvalues 和 Rvalues

C# 中的两种表达式:

  • lvalue:lvalue 表达式可以出现在赋值语句的左边或右边。
  • rvalue:rvalue 表达式可以出现在赋值语句的右边,不能出现在赋值语句的左边。

左值(lvalue)是指在单个表达式的外部保留的对象。 可以将左值视为具有名称的对象。 所有变量(包括不能更改的 (const) 变量)都是左值。 左值是一个不在使用它的表达式的外部保留的临时值。

数值是 rvalue 的,因此不能被赋值,不能出现在赋值语句的左边。下面是一个有效的语句:

int x = 3 + 4;  

在此示例中,x 是左值,因为它在定义它的表达式的外部保留。 表达式 3 + 4 是为一个右值,因为其计算结果为不在定义它的表达式的外部保留的临时值。

8、C# 命名空间(Namespace)

命名空间的设计目的是提供一种让一组名称与其他名称分隔开的方式。在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突。

命名空间的定义是以关键字 namespace 开始,后跟命名空间的名称,如下所示:

namespace namespace_name
{
// 代码声明
}

using 关键字表明程序使用的是给定命名空间中的名称。例如,我们在程序中使用 System 命名空间,其中定义了类 Console。我们可以只写:

Console.WriteLine ("Hello world");

我们可以写完全限定名称,如下:

System.Console.WriteLine("Hello world");

在C#中,命名空间可以被嵌套,即您可以在一个命名空间内定义另一个命名空间,如下所示:

namespace namespace_name1
{
// 代码声明
namespace namespace_name2
{
// 代码声明
int age = 18 ;
}
}

在C#中,你可以使用点(.)运算符访问嵌套的命名空间的成员,例如上例中你可以这样使用:

namespace_name1.namespace_name2.age = 30 ;

详见:https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/keywords/namespace

C#常见的概念阐述的更多相关文章

  1. ElasticSearch基本概念阐述

    下面阐述一下ES当中的一些常见词语含义: 集群 集群由一个或多个节点组成,对外提供服务,索引和搜索功能.在所有的节点中,一个集群有一个唯一的名称默认为“ElasticSearch”,此名称很重要,因为 ...

  2. Docker关键概念阐述

    要了解Docker需要对其体系结构中的几个关键概念有所了解,主要包括image.container.service.swarm.stack等. 在介绍这几个概念时,会使用到一个测试环境,这个测试环境是 ...

  3. Java面试常见各种概念区别比较

    Hashtable 和 HashMap之间的区别 Hashtable是继承了Dictionary,是线程安全的.HashMap实现了Map接口,不是线程安全的.HashMap是Hashtable的轻量 ...

  4. C++常见的概念

    1)多态:允许将子类类型的指针赋值给父类类型的指针.赋值以后,父类对象可以根据当前赋值给它的子类对象的特性以不同的方式运作. 2)深拷贝:重新分配内存:浅拷贝:共用同一内存. 3)友元:非成员函数不能 ...

  5. css常见的概念

    padding-top:10px;是指容器内的内容距离容器的顶部有10个像素,是包含在容器内的: margin-top:10px;是指容器本身的顶部距离其他容器有10个像素,不包含在容器内: top: ...

  6. web开发中的一些不常见的概念

    1.惊群  [活跃]星际争霸小王子 就是当你在车站时,一堆拉客的人一拥而上,想你坐他的车,于是就惊群了.但你只能坐一个车,所以没拉到你的就悻悻而归,于是return false[活跃]星际争霸小王 2 ...

  7. javascript面向对象系列第四篇——OOP中的常见概念

    前面的话 面向对象描述了一种代码的组织结构形式——一种在软件中对真实世界中问题领域的建模方法.本文将从理论层面,介绍javascript面向对象程序程序(OOP)中一些常见的概念 对象 所谓对象,本质 ...

  8. JavaScript面向对象当中的几个概念

    JS面向对象过程中的几个概念 前言 面向对象描述的是一种代码组织解构的形式,一种在软件中对真实世界中问题领域的建模方法. 下面将从理论层面来介绍下面向对象编程中一些常见的概念. 对象 所谓对象,本质上 ...

  9. SQL Server“复杂”概念之理解

    用惯了Oracle的人,接触SQL Server中的概念时,会觉得比较难理解,甚至感觉有点“绕”,这是因为Oracle中将某些其他数据库中存在的概念给简化了,这里就拿两个最常见的概念来举例说明:1.s ...

随机推荐

  1. c#操作SQL的例子

    >> 数据表复制 当表目标表存在时: insert into 目的数据库..表 select * from 源数据库..表 当目标表不存在时: select * into 目的数据库..表 ...

  2. 3.Centos-Docker-rancher

    1.安装mysql,设置密码 docker run -d --name mysqldb -e MYSQL_ROOT_PASSWORD=密码 mysql:latest --character-set-s ...

  3. python 向mysql插入数据

    生成随机内容用到的方法: substr是一个字符串函数,从第二个参数1,开始取字符,取到3 + floor(rand() * 75)结束 floor函数代表的是去尾法取整数. rand()函数代表的是 ...

  4. [thinkphp] 如何解析ajaxReturn返回的json字符串

    success: function(data){ var dataObj=eval("("+data+")");//转换为json对象 alert(dataOb ...

  5. 计蒜客 28437.Big brother said the calculation-线段树+二分-当前第k个位置的数 ( ACM训练联盟周赛 M)

    M. Big brother said the calculation 通过线段树维护. 这个题和杭电的一道题几乎就是一样的题目.HDU5649.DZY Loves Sorting 题意就是一个n的排 ...

  6. 洛谷 P1049 装箱问题【正难则反/01背包】

    题目描述 有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30,每个物品有一个体积(正整数). 要求n个物品中,任取若干个装入箱内,使箱子的剩余 ...

  7. java trim start end space

    Java program that trims starts and ends public class Program { public static String trimEnd(String v ...

  8. Xamarin XAML语言教程通过数据绑定使用Progress属性

    Xamarin XAML语言教程通过数据绑定使用Progress属性 开发者除了可以为ProgressBar定义的Progress属性直接赋双精度类型的值外,还可以通过数据绑定的方式为该属性赋值,此时 ...

  9. JD

    General Description: The role is responsible for China COE Operations Team’s data and cost analysis, ...

  10. Ubuntu 16.04没有/etc/default/rcS文件的UTC设置选项的问题解决

    继续上一篇文章介绍了CentOS的时钟设置:http://www.cnblogs.com/EasonJim/p/8111747.html,大致的知道了BIOS在Linux的时区设置. 而现在关心的问题 ...