C#面向对象

访问修饰符与字段修饰符

访问修饰符

  • 修饰类主要有2个,即 internalpublic,如果省略了访问修饰符,即为internal

  • 修饰成员变量有 4 个,具体用法如下:

    ( 1) public

    成员可以被任何代码访问。

    (2) internal

    成员仅能被同一个项目中的代码访问。

    (3) protected

    成员只能由类或派生类中的代码访问。

    (4) private

    成员仅能被同一个类中的代码访问,如果在类成员前未使用任何访问修饰符,则默认为 private

字段修饰符

主要有2个,readonlystatic

  • 使用 readonly修饰字段意味着只能读取该字段的值而不能给字段赋值。

  • 使用 static修饰的字段是静态字段,可以直接通过类名访问该字段。常量不能使用static修饰符修饰

字段在类中定义完成后,在类加载时,会自动为字段赋值,不同数据类型的字段默认值不同, 如下表所示。

数据类型 默认值
int 0
float、double 0
string 空值
char a
bool False
其他引用类型 空值

方法参数

方法中的参数除了定义数据类型外,还可以定义引用参数输出参数。引用参数使用 ref关键字定义,输出参数使用 out 关键字定义。

  • 引用参数在方法使用时,必须是由变量赋予的值,不能是常量或表达式;
  • 在需要在每一个参数前面加上 ref 关键字修饰。
1
2
3
4
5
6
7
8
9
public int Add(ref int num1, ref int num2)
{
return num1 + num2;
}

// 调用时
int num1 = 2;
int num2 = 3;
int sum = Add(ref num1,ref num2);
  • 在使用输出参数时,必须在方法操作结束前为带输出参数的形式参数赋值;
  • 在调用含有带输出参数的方法时,必须在传递参数时使用 out 关键字,但不必给输出参数赋值。
1
2
3
4
5
6
7
public int Add(int num1, int num2, out int sum)
{
sum = num1 + num2;
return sum;
}
// 调用时
int sum = Add(1, 1, sum);

partial部分类

用于表示一个类中的一部分,一个类可以由多个部分类构成,定义部分类的语法形式如下:

1
访问修饰符 修饰符   partial class 类名{……}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
namespace TestClass
{
partial class Person
{
private string name;
private char gender;
private int age;

public string Name { get => name; set => name = value; }
public char Gender { get => gender; set => gender = value; }
public int Age { get => age; set => age = value; }
}

partial class Person
{
public void Print()
{
Console.WriteLine("Name: "+ name);
Console.WriteLine("Gender: "+ gender);
Console.WriteLine("Age: "+ age);
}
}
}

// 创建类并调用类方法
namespace TestClass
{
class Program
{
static void Main(string[] args)
{
Person person = new Person();
person.Name = "zhangyuzhen";
person.Gender = '男';
person.Age = 21;
person.Print();
}
}
}

在“不同”的部分类中可以直接互相访问其成员,相当于所有的代码都写到一个类中。

sealed

通过在类定义前面放置关键字 sealed,可以将类声明为密封类。当一个类被声明为 sealed 时,它不能被继承。抽象类不能被声明为 sealed。

virtual

虚方法是使用关键字 virtual 声明的。

虚方法可以在不同的继承类中有不同的实现。

对虚方法的调用是在运行时发生的。

  • 动态多态性是通过 抽象类(abstract) 和 虚方法(virtual) 实现的。

  • 静态多态性通过方法重载运算符重载实现

重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的。与其他函数一样,重载运算符有返回类型和参数列表。

1
2
3
4
5
6
7
public static Box operator+ (Box b, Box c)
{
Box box = new Box();
box.length = b.length + c.length;
box.height = b.height + c.height;
return box;
}

异常类

C# 异常是使用类来表示的。C# 中的异常类主要是直接或间接地派生于 System.Exception 类。System.ApplicationExceptionSystem.SystemException 类是派生于 System.Exception 类的异常类。System.ApplicationException 类支持由应用程序生成的异常。所以程序员定义的异常都应派生自该类。System.SystemException 类是所有预定义的系统异常的基类。