前言
前面我介绍了.NET的概述、构成及发展历程与未来,在前文中提到C#语言。C#【读作C Sharp】语言是一种高级编程语言,是.NET 开发平台上使用的编程语言,用它来开发构建.NET的相关应用程序。 本文介绍C#语言基础知识之程序结构与数据类型,是C#语言基础的第一篇。
一、程序的通用结构
C#程序由一个或多个源文件组成,源文件内容包含零到多个命名空间,而命名空间包含类、结构、接口、枚举、委托等类型或其他命名空间。下面通过源文件代码了解:
namespace YourNamespace
{
class YourClass
{
}
struct YourStruct
{
}
interface IYourInterface
{
}
delegate int YourDelegate();
enum YourEnum
{
}
namespace YourNestedNamespace
{
struct YourStruct
{
}
}
}
认识第一个C#程序:
// 使用到的命名库
#region UseNamespace
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
#endregion
/// <summary>
/// 命名空间 我们一般按项目、实现相同功能等来定义它
/// </summary>
namespace Fountain.Net.Base.Sample
{
/// <summary>
/// 类名
/// </summary>
class Program
{
/// <summary>
/// 控制台程序入口
/// </summary>
static void Main(string[] args)
{
string word = "C#";
// 控制台输出内容
Console.WriteLine("Hello C#!");
}
}
}
-
解析代码
-
第3~6行:
-
第 12 行:定义了程序自己命名空间 Fountain.Net.Base.Sample。
-
第 17 行:定义了类名。
-
第 22 行:定义了方法名Main,控制台程序入口。
-
第 17 行:调用类Console的一个方法,在控制台输出内容 Hello C#!。
-
第1、7 行:定义了代码块#region #endregion是C#的前置处理指示词。
-
第9~11行:使用XML的的一种注释,一般在类、方法、属性上使用。
-
第 25 行:使用单行注释。
-
二、数据类型
数据类型主要用于指明变量和常量存储值的类型,C#语言是一种强类型语言,要求每个变量都必须指定数据类型。在C#中数据类型分为 值类型、引用类型二种。
值类型
值类型变量直接包含其值。结构的内存在声明变量的任何上下文中进行分配,对于值类型变量,没有单独的堆分配或垃圾回收开销,它派生自System.ValueType。值类型不能派生新类型、不能包含null值及都需初始化该类型的默认值。值类型包括整型、浮点型、字符型、布尔型、枚举型等。下表列出C#的值类型:
类型 | 描述 | 范围 | 默认值 | |
布尔型 | bool | 布尔值 | true 或 false | false |
字符型 | char | 16 位 Unicode 字符 | U +0000 到 U +ffff | '' |
浮点型 | decimal | 128 位精确的十进制值,28-29 有效位数 | (-7.9 x 10^38 到 7.9 x 10^38 ) / 10^0~38 | 0.0M |
double | 64 位双精度浮点型 | (+/-)5.0 x 10-^324 到 (+/-)1.7 x 10^308 | 0.0D | |
float | 32 位单精度浮点型 | -3.4 x 10^38 到 + 3.4 x 10^38 | 0.0F | |
整型 | int | 32 位有符号整数类型 | -2,147,483,648 到 2,147,483,647 | 0 |
long | 64 位有符号整数类型 | -923,372,036,854,775,808 到 9,223,372,036,854,775,807 | 0L | |
sbyte | 8 位有符号整数类型 | -128 到 127 | 0 | |
short | 16 位有符号整数类型 | -32,768 到 32,767 | 0 | |
byte | 8 位无符号整数 | 0 到 255 | 0 | |
uint | 32 位无符号整数类型 | 0 到 4,294,967,295 | 0 | |
ulong | 64 位无符号整数类型 | 0 到 18,446,744,073,709,551,615 | 0 | |
ushort | 16 位无符号整数类型 | 0 到 65,535 | 0 | |
枚举型 | enum | 是由基础整型数值类型的一组命名常量定义的值类型 |
引用类型
引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。声明引用类型变量时,包含null值,直到将其分配给该类型的实例。它派生自System.Object类。创建对象时,会在托管堆上分配内存,在分配内存和回收内存时都会产生开销。引用类型内置包括对象类型、动态类型、字符串类型等。还有用户自定义引用类型:类、接口、委托这些将在以后的章节介绍。
- 对象类型(Object)
对象类型 是 C# 所有数据类型的终极基类。对象类型可以被分配任何其他类型(值类型、引用类型、预定义类型或用户自定义类型)的值。但是在分配值之前需要先进行类型转换。
Object obj = "C# Sample";
-
动态类型(Dynamic)
动态类型可以存储任何类型的值在变量中。这些类型的变量会绕过用编译器编译时类型检查, 改为在运行时解析检查。动态类型只在编译时存在,在运行时则不存在。它是.NET 4.0 后才出现的类型。
dynamic _dynamic = "Hello C#";
-
字符串类型(String)
字符串类型是 System.String 类的别名。它是从对象(Object)类型派生的。
// 一般
string printer = "Microsoft Print to PDF";
// 有特殊字符
string path = @"C:\log";
值类型与引用类型区别
1、派生类不同,值类型派生自System.ValueType而引用类型派生自System.Object;
2、内存存储方式不同,值类型存储在栈中而引用类型是存储在堆中;
3、本质不同,值类型是实际数据而引用类型是指向存储在内存堆中的数据的指针或引用;
三、示例参考
// 使用到的命名库
#region UseNamespace
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
#endregion
/// <summary>
/// 命名空间 我们一般按项目、实现相同功能等来定义它
/// </summary>
namespace Fountain.Net.Base.Sample
{
/// <summary>
/// 类名
/// </summary>
class Program
{
/// <summary>
/// 控制台程序入口
/// </summary>
static void Main(string[] args)
{
// 定义布尔类型
bool isOpen = true;
Console.WriteLine("布尔值:" + isOpen);
// 定义整型类型
int apple = 10;
Console.WriteLine("精确的十进制值:" + yuan);
// 定义浮点类型
float height = 168.0f;
Console.WriteLine("单精度浮点型:" + height);
// 定义双精度浮点类型
double length = 168.20;
Console.WriteLine("双精度浮点型:" + length);
// 定义双精度浮点类型
decimal yuan = 168.00M;
Console.WriteLine("精确的十进制值:" + yuan);
}
}
}
小结
本文对C#语言的程序结构及数据类型进行描述,其它知识可关注后续文章。通过了解后大家可以尝试自己动手。