文章目录
本文比较杂乱,是本人在学习C#中的一些笔记,并不全面,只是一些随笔。
1. C# 程序简介:
一个C#程序主要包括以下部分:
命名空间声明(Namespace declaration)
一个 class
Class 方法
Class 属性
一个 Main 方法
语句(Statements)& 表达式(Expressions)
注释
// using 关键字用于在程序中包含 System 命名空间。 一个程序一般有多个 using 语句。
using System;
//声明一个命名空间,在这里HelloWorldApplication中只包含了一个HelloWorld类
namespace HelloWorldApplication
{
//类名
class HelloWorld
{
//一个Main方法,是所有 C# 程序的 入口点。
static void Main(string[] args)
{
/* 我的第一个 C# 程序*/
//在屏幕上打印出一行字
Console.WriteLine("Hello World");
//是针对 VS.NET 用户的。这使得程序会等待一个按键的动作,防止程序从 Visual Studio .NET 启动时屏幕会快速运行并关闭。
Console.ReadKey();
}
}
}
2.数据类型详解
2.1 值类型
如果在实际使用过程中不记得当前数据类型的大小时,可以使用sizeof函数获取。
Console.WriteLine("Size of int: {0}", sizeof(int));
运行结果为:
Size of int: 4
表示int类型能够容纳4个字节,也就是32位的有符号整数类型。
2.2 引用类型
引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。
换句话说,它们指的是一个内存位置。使用多个变量时,引用类型可以指向一个内存位置。如果内存位置的数据是由一个变量改变的,其他变量会自动反映这种值的变化。内置的 引用类型有:object、dynamic 和 string。
- 对象(Object)类型
对象(Object)类型 是 C# 通用类型系统(Common Type System - CTS)中所有数据类型的终极基类。Object 是 System.Object 类的别名。所以对象(Object)类型可以被分配任何其他类型(值类型、引用类型、预定义类型或用户自定义类型)的值。但是,在分配值之前,需要先进行类型转换。
当一个值类型转换为对象类型时,则被称为 装箱;另一方面,当一个对象类型转换为值类型时,则被称为 拆箱。
object obj;
obj = 100; // 这是装箱
- 动态(Dynamic)类型
您可以存储任何类型的值在动态数据类型变量中。这些变量的类型检查是在运行时发生的。
声明动态类型的语法:
dynamic <variable_name> = value;
例如:
dynamic d = 20;
动态类型与对象类型相似,但是对象类型变量的类型检查是在编译时发生的,而动态类型变量的类型检查是在运行时发生的。
- 字符串类型
同java字符串类型的声明方式:
String str = "runoob.com";
但是前面可以加上@代表转义字符:
在这里插入代码片
2.3 指针类型(Pointer types)
指针类型变量存储另一种类型的内存地址。C# 中的指针与 C 或 C++ 中的指针有相同的功能。
声明指针类型的语法:
type* identifier;
3. C#的类型转换
类型转换分为显式和隐式两种,隐式不必多说,显示也与java大致相同。
double d = 5673.74;
int i;
// 强制转换 double 为 int
i = (int)d;
C#提供了一些内置的数据类型转换方法:
方法 | 描述 |
---|---|
ToBoolean | 如果可能的话,把类型转换为布尔型。 |
ToByte | 把类型转换为字节类型 |
ToChar | 如果可能的话,把类型转换为单个 Unicode 字符类型。 |
ToDateTime | 把类型(整数或字符串类型)转换为 日期-时间 结构。 |
ToDecimal | 把浮点型或整数类型转换为十进制类型。 |
ToDouble | 把类型转换为双精度浮点型。 |
ToInt16 | 把类型转换为 16 位整数类型。 |
ToInt32 | 把类型转换为 32 位整数类型。 |
ToInt64 | 把类型转换为 64 位整数类型。 |
ToSbyte | 把类型转换为有符号字节类型。 |
ToSingle | 把类型转换为小浮点数类型。 |
ToString | 把类型转换为字符串类型。 |
ToType | 把类型转换为指定类型。 |
ToUInt16 | 把类型转换为 16 位无符号整数类型。 |
ToUInt32 | 把类型转换为 32 位无符号整数类型。 |
ToUInt64 | 把类型转换为 64 位无符号整数类型。 |
例如:
bool b = true;
Console.WriteLine(b.ToString());
结果为:
True
4. 常量
4.1 整数常量
4.2 字符串常量
和java中的String一样
4.3 定义常量
const <data_type> <constant_name> = value;
例如:
const double pi = 3.14159;
5.运算符
5.1 算术运算符
5.2 关系运算符
5.3 逻辑运算符
5.4 位运算符
5.5 赋值运算符
5.6 其他运算符
5.7 运算符的优先级
6. C#的封装
- public:所有对象都可以访问;
- private:对象本身在对象内部可以访问;
- protected:只有该类对象及其子类对象可以访问(在继承的章节会详细了解)
- internal:同一个程序集的对象可以访问;
- protected internal:访问限于当前程序集或派生自包含类的类型。
6.1 Internal
Internal 访问说明符允许一个类将其成员变量和成员函数暴露给当前程序中的其他函数和对象。换句话说,带有 internal 访问修饰符的任何成员可以被定义在该成员所定义的应用程序内的任何类或方法访问。
6.2 Protected Internal
Protected Internal 访问修饰符允许在本类,派生类或者包含该类的程序集中访问。这也被用于实现继承。
7. 方法中参数的传递方式
7.1 值传递
实际参数的值会复制给形参,实参和形参使用的是两个不同内存中的值。所以,当形参的值发生改变时,不会影响实参的值,从而保证了实参数据的安全。
7.2 引用传递
引用参数是一个对变量的内存位置的引用。当按引用传递参数时,与值参数不同的是,它不会为这些参数创建一个新的存储位置。引用参数表示与提供给方法的实际参数具有相同的内存位置。
在 C# 中,使用 ref 关键字声明引用参数。
例如:
public void swap(ref int x, ref int y)
{
int temp;
temp = x; /* 保存 x 的值 */
x = y; /* 把 y 赋值给 x */
y = temp; /* 把 temp 赋值给 y */
}
7.3 按输出传递参数
return 语句可用于只从函数中返回一个值。但是,可以使用 输出参数 来从函数中返回两个值。输出参数会把方法输出的数据赋给自己,其他方面与引用参数相似。
提供给输出参数的变量不需要赋值。当需要从一个参数没有指定初始值的方法中返回值时,输出参数特别有用。请看下面的实例,来理解这一点:
using System;
namespace CalculatorApplication
{
class NumberManipulator
{
public void getValues(out int x, out int y )
{
Console.WriteLine("请输入第一