using System; //命名空间System
namespace Simple //声明一个新命名空间, 名称为Simple
{
class Program //声明一个类
{
static void Main() //声明一个名为Main的方法作为类Program的成员
{
Console.WriteLine("Hi, there!"); //使用命名空间System中的一个名称为Console的类打印
}
}
}
命名空间是一个和名称相关联的一组类型声明, 该程序使用两个命名空间, 创建了一个名称为Simple的新命名空间, 并在其之中声明了其类型(类Program); 还使用了一个名称为System的预定义空间
标识符和关键字
C#可以使用@作为且仅作为标识符的首位字符。
Pascal大小写建议用于类型名和成员名
Camel大小写建议用于本地变量和方法参数
全大写建议用于缩写词
成员字段要么以下划线开头, 要么以m_开头
从程序中输出文本
在System命名空间中, BCL提供了名称叫做Console的类, 包含了输入和输出数据到控制台窗口的方法
Write
Write是Console的成员, 可打印文本。
WriteLine
WriteLine会在每个输出字符串的结尾添加一个换行符。
格式字符串
Console.WriteLine("The value of var1 is {0} and {1}", var1, 3);
替代标记由数字和一对大括号组成, 里面的数字表示使用第几个替换值, 从0开始
多重标记和值
Console.WriteLine("The value of var1 is {0} and {1} and {0}", var1, 3);
注释
单行注释和带分隔符注释与C相同
文档注释
使用三斜杠进行注释, 文档注释包含XML文本, 可以用来产生程序文档
/// <summary>
/// This class does...
/// </summary>
class Program
{
........
}
C#程序是一组类型声明
C程序是一组函数和数据类型, C++是一组函数和类, C#是一组类型声明
命名空间是一种把相关的类型声明分组并命名的方法, 通常会把程序声明在命名空间内部。
类型是一种模板
可以把类型想象成一个用来创建数据结构的模板。
类型由下面的元素定义:
- 名称
- 用于保存数据成员的数据结构
- 一些行为和约束条件
实例化类型
从某个类型模板创建的对象, 称为实例化该类型
数据成员和函数成员
成员分两种:数据成员和函数成员
预定义类型
C# 提供了16种预定义类型
sbyte: 8位有符号整数
byte: 8位无符号整数
short, ushort, int, uint, long, ulong, float, double, bool, char
decimal: 超高精度小数, 精度为小数点后28位
object: 所有其它类型的基类
string: 字符串
dynamic: 使用动态语言编写的程序集时使用
用户定义类型
class: 类类型
struct: 结构类型
array: 数组类型
enum: 枚举类型
delegate: 委托类型
interface: 接口类型
值类型和引用类型
值类型存在栈中
引用类型需要两段内存:
- 存储实际的数据, 总是位于堆中
- 是一个引用, 指向数据在堆中的存放位置
C#类型的分类
值类型: sbyte, byte, float, short, ushort, double, int, uint, char, long, ulong, decimal, bool, struct, enum
引用类型:object, string, dynamic, interface, delegate, array
变量
C# 提供了四种变量:
- 本地变量: 不是类型的成员, 在方法的作用域保存临时数据
- 字段: 是类型的成员, 保存和类型或类型实例相关的数据
- 参数: 用于从一个方法到另一个方法传递数据的临时变量
- 数组元素 是类型的成员, 由数据项构成的有序集合的一个成员
初始化
本地变量 不会自动初始化
类字段会自动初始化
结构字段会自动初始化
参数不会自动初始化
数组元素会自动初始化
静态类型和dynamic关键字
变量的类型在编译时确定且不能在运行时修改, 这叫做静态类型
IronPython和IronRuby之类的脚本语言是动态类型的, 且C#程序需要能够使用这些语言编写的程序集。
为解决该问题, dynamic关键字向编译器表示该变量是动态化的静态类型。
可空类型
对于引用类型, 将变量设置为null即可
值类型的变量需要使用一个布尔指示器来和变量关联, 如果值有效, 则为true。
创建可空类型
int? myNInt = 28;
要检查可空类型是否包含值, 与null比较即可
if (myInt1 != null)
Console.WriteLine("{0}", myInt1);
非可空类型和可空类型之间存在隐式转换
可空类型和非可空类型之间存在显示转换
int? myInt1 = 15;
int regInt = (int) myInt1;
为可空类型赋值
可以赋予可空类型与其底层相同的值, 相同可空类型的值, null
int? myI1, myI2, myI3;
myI1 = 28;
myI2 = myI1;
myI3 = null;
Console.WriteLine("myI1: {0}, myI2: {1}", myI1, myI2);
类:基础
类的概述
类是一种活动的数据结构
程序的数据和功能被组织为逻辑上相关的数据项和函数的封装集合, 称之为类。
类是一个能储存数据并执行代码的数据结构
包含如下内容:
数据成员:储存与类或类的实例相关的数据, 数据成员通常模拟该类所表示的现实世界事物的特性。
函数成员: 执行代码。函数成员通常模拟类所表示的现实世界事物的功能和操作。
声明类
class MyExcellentClass
{
//成员声明
}
类成员
字段
字段可以是任何类型
声明方式如下:
Type Identifier;
class MyClass
{
int myField;
}
C#不能声明全局变量, 所有的字段都属于类型, 而且必须在类型声明内部进行声明。
显式和隐式字段初始化
如果没有初始化语句, 则每种类型的默认值都是0。
方法
方法是具有名称的可执行代码块, 同样还有匿名方法。
当方法被调用(call或invoke)时, 其执行自己所含的代码, 方法相当于C++中的成员函数
class SimpleClass
{
void PrintNums()
{
Console.WriteLine("1");
Console.WriteLine("2");
}
}
为数据分配内存
声明类类型的变量需要为实际数据分配内存, 需要使用new运算符。
new依据类型的不同从栈或堆中分配
new TypeName()
Dealer theDealer = new Dealer();
实例成员
实例成员: 类的每个实例都是不同的实体, 它们有自己的一组数据成员, 因为这些数据成员都和类的实例相关, 故被称为实例成员
静态成员: 实例成员是默认类型, 但也可以声明与类而不是与实例相关的成员, 称之为静态成员
访问修饰符
共有5种访问修饰符:
- private(私有的)
- public (公有的)
- protected(受保护的)
- internal(内部的)
- 受保护内部的(protected internal)
私有访问和公有访问
私有成员只能从声明它的内部进行访问, 其他的类不可看见或访问
私有访问是默认的访问级别
int MyInt1;
private int MyInt2;
公有对象可以被程序中的其他对象访问, 使用public来声明
public int MyInt;
从类的内部访问成员
class DaysTemp
{
private int High = 75;
private int Low = 45;
//方法
private int GetHigh()
{
return High;
}
private int GetLow()
{
return Low;
}
public float Average()
{
return (GetHigh() + GetLow()) / 2;
}
}
从类的外部访问成员
class DaysTemp
{
public int High = 75;
public int Low = 45;
}
class Program
{
static void Main()
{
DaysTemp temp = new DaysTemp();
temp.High = 85;
temp.Low = 60;
Console.WriteLine("High: {0}", temp.High);
Console.WriteLine("Low: {0}", temp.Low);
}
}
综合应用
using System;
class DaysTemp
{
public int High, Low;
public int Average()
{
return (High + Low) / 2;
}
}
class Program
{
static void Main()
{
DaysTemp t1 = new DaysTemp();
DaysTemp t2 = new DaysTemp();
//字段赋值
t1.High = 76; t1.Low = 57;
t2.High = 75; t2.Low = 53;
//读取字段值
//调用实例的方法
Console.WriteLine("t1: {0}, {1}, {2}",
t1.High, t1.Low, t1.Average());
Console.WriteLine("t2: {0}, {1}, {2}",
t2.High, t2.Low, t2.Average());
}
}
本文介绍了C#编程的基础知识,包括标识符和关键字、输出文本的方法、注释、类型系统、变量、静态类型与动态类型、可空类型以及类的基本概念。内容涵盖命名空间、预定义类型、数据成员、函数成员、类的声明与成员访问修饰符等核心概念。
9957

被折叠的 条评论
为什么被折叠?



