C#
- 虽然 C# 的构想十分接近于传统高级语言 C 和 C++,是一门面向对象的编程语言,但是它与 Java 非常相似,有许多强大的编程功能。
- C# 成为一种广泛应用的专业语言的原因:
- 现代的、通用的编程语言。
- 面向对象。
- 面向组件。
- 容易学习。
- 结构化语言。
- 它产生高效率的程序。
- 它可以在多种计算机平台上编译。
- .Net 框架的一部分。
C#类
-
using 关键字用于在程序中包含 System 命名空间
-
一个 namespace 里包含了一系列的类。Project1 命名空间包含了类Bunny
-
类Bunny 包含了程序使用的数据和方法声明
-
主函数入口声明, 定义了Main 方法,是所有 C# 程序的 入口点
-
执行类时显示消息:Console.WriteLine(“Hello World!!”);
-
等待用户按键动作,防止程序快速结束:Console.ReadKey();
-
成员变量和成员函数
-
创建类实例和调用类成员函数
-
构造函数在创建类的新对象时执行。构造函数的名称与类的名称完全相同,它没有任何返回类型。
- 实例构造函数没创建一个类就调用一次,而静态构造函数(static 类名(){…})先于实例构造函数被调用,并且只被调用一次
- 有参无参构造函数的初始化
using System; namespace Project1 { class Bunny // 定义类Bunny { public double width; // 成员变量 public double height; public Bunny() { } // 无参构造函数 public Bunny(double w) { width = w; } } class ExecuteBunny { static void Main(string[] args) { Bunny b0 = new Bunny { width = 2.0, height = 3.0 }; Bunny b1 = new Bunny(2.0) { height = 3.0 }; Console.ReadKey(); } } }
-
set、get
// 在类Student定义属性Name private string _name; public string Name { get { return _name; } // 读 set { _name = value; } // 写 } // 在主函数使用Name读写数据 Student st = new Student(); st.Name = "Chen"; Console.WriteLine(st.Name); // 这种情况下只能在类Student中使用Name写入数据 private set { _name = value; }
-
析构函数用于在结束程序(比如关闭文件、释放内存等)之前释放资源,不能继承或重载。
-
静态成员:用 static 关键字把类成员定义为静态的。当声明类成员为静态时,那么无论有多少个类的对象被创建,都只会有一个该静态成员的实例。
- 静态变量用于定义常量,因为它们的值可以通过直接调用类而不需要创建类的实例来获取。当使用静态字段或静态函数等,都会调用静态函数。
// 在类Student定义静态变量sta public static int sta = 2; // 在主函数通过类名来使用静态变量sta,而不用创建对象 Console.WriteLine("sta:{0}", Student.sta);
- 静态变量可在成员函数、类的定义外部、类的定义内部初始化。由于只会有一个该静态成员的实例,当一个类对象改变该静态变量,另一个类对象中的该变量也会受到影响
- 静态函数只能访问静态变量,它在对象被创建之前就已经存在。
using System; namespace Project1 { class Class1 { static void Main(string[] args) { //执行类时显示消息 Console.WriteLine("Hello World!!"); //等待用户按键动作,防止程序快速结束 Console.ReadKey(); } } }
- 静态变量用于定义常量,因为它们的值可以通过直接调用类而不需要创建类的实例来获取。当使用静态字段或静态函数等,都会调用静态函数。
-
as操作符
as关键字可以将对象转换为指定类型,如果转换成功会返回转换后的对象,如果转换不成功则返回null。Object obj = new NewType(); NewTYpe newObj = obj as NewType;
C#继承
1.C#基类和派生类
一个类可以派生自多个类或接口,这意味着它可以从多个基类或接口继承数据和函数。
C# 中创建派生类的语法如下:
class <基类>
{
...
}
class <派生类> : <基类>
{
...
}
2.基类的初始化
派生类继承了基类的成员变量和成员方法,可以在成员初始化列表中进行父类的初始化。
class Rectangle
{
protected double length;
protected double width;
public Rectangle(double l,double w)
{
length = l;
width = w;
}
}
class Tabletop : Rectangle
{
// 初始化基类
public Tabletop(double l,double w) : base(l, w) {
}
}
C#多态性
多态是同一个行为具有多个不同表现形式或形态的能力,往往表现为"一个接口,多个功能"。
多态性可以是静态的或动态的。在静态多态性中,函数的响应是在编译时发生的。在动态多态性中,函数的响应是在运行时发生的。
在 C# 中,每个类型都是多态的,因为包括用户定义类型在内的所有类型都继承自 Object。
C# 提供了两种技术来实现静态多态性。分别为:函数重载、运算符重载。
函数重载
可以在同一个范围内对相同的函数名有多个定义。函数的定义必须彼此不同,可以是参数列表中的参数类型不同,也可以是参数个数不同。不能重载只有返回类型不同的函数声明。
public class TestData
{
public int Add<