目录
C# 基础知识(六)_函数(方法),类,接口
函数(方法)
C# 中的函数(也可以称为方法)是一段具有签名(由函数名、参数类型和参数修饰符组成的函数信息)的代码块,可以用来实现特定的功能。
函数声明
访问权限修饰符 返回值类型 函数名称(参数列表)
{
函数主体
}
访问权限修饰符:用于指定函数对一个类的可见性;
返回值类型:用于指定函数返回值的数据类型;
函数名称:用于进行函数调用的唯一名称;
参数列表:在调用函数时需要传递给函数的参数,参数列表是可选的,可以为空;
函数主体:其中包含了实现函数功能的若干代码。
函数调用
using System;
namespace Notes
{
class Program
{
static void Main(string[] args)
{
Function("无返回值函数调用");
string str = Function("有返回值", "函数调用");
Console.WriteLine(str);
Function();
Console.ReadKey();
}
public static void Function(string str)
{
Console.WriteLine("打印的string为:" + str);
}
public static string Function(string str1, string str2)
{
return str1 + str2;
}
public static void Function()
{
Console.WriteLine("无参数函数调用");
}
}
}
参数传递
C# 中,有三种向方法传递参数的方式:
ref ,out
out、ref都是传递引用(内存地址),使用后都将改变原来参数的数值。
例:
using System;
namespace Note
{
class Program
{
static void Main(string[] args)
{
int a = 10;
int b = 100;
int ref_aValue = 0;
int ref_bValue = 0;
int out_aValue;
int out_bValue;
Swap(out out_aValue, out out_bValue, ref ref_aValue, ref ref_bValue, a, b);
Console.WriteLine("a的值:" + a);
Console.WriteLine("out_aValue的值:" + out_aValue);
Console.WriteLine("ref_aValue的值:" + ref_aValue);
Console.WriteLine("b的值:" + b);
Console.WriteLine("out_bValue的值:" + out_bValue);
Console.WriteLine("ref_bValue的值:" + ref_bValue);
Console.ReadKey();
}
static void Swap(out int out_aValue, out int out_bValue, ref int ref_aValue, ref int ref_bValue,int a,int b)
{
int temp;
temp = a;
a = b;
b = temp;
ref_aValue = a;
ref_bValue = b;
out_aValue = a;
out_bValue = b;
}
}
}
注:
传递到 ref 参数的参数必须最先初始化。
退出函数时所有out引用的变量都要赋值。
类
类是引用类型的,其中包括状态(成员属性)和操作(成员方法和其它函数成员)。
类的定义
访问权限修饰符 class 类名
{
//成员属性
//成员方法
//函数
}
对象
类和对象是不同的概念,类决定了对象的类型,但不是对象本身。另外,类是在开发阶段创建的,而对象则是在程序运行期间创建的。我们可以将对象看作是基于类创建的实体,所以对象也可以称为类的实例。
例:
存在一个类People:
class People
{
string name;
}
创建一个类People的实例需要使用 new 关键字
People 你自己 = new People();
People 隔壁家的孩子 = new People();
//最好不要让中文在你的代码中出现,注释除外
构造函数
构造函数就是与类(或结构体)具有相同名称的成员函数,它在类中的地位比较特殊,不需要我们主动调用,当创建一个类的对象时会自动调用类中的构造函数。在程序开发的过程中,我们通常使用类中的构造函数来初始化类中的成员属性。如果没有为类显式的创建构造函数,那么 C# 将会为这个类隐式的创建一个没有参数的构造函数(无参数构造函数)。
构造函数有三种: 实例构造函数; 静态构造函数; 私有构造函数
1)实例构造函数
例:
using System;
namespace Note
{
class People
{
public string name;
public string sex;
public int age;
public People(string name, string sex, int age)//有参构造
{
this.name = name;
this.sex = sex;
this.age = age;
}
public People()//无参构造(如果类中没有创建任何构造,C#会自动创建无参构造函数)
{
}
}
class Program
{
static void Main(string[] args)
{
People p = new People("W", "男", 27);
Console.WriteLine("名字:" + p.name + "\n性别:" + p.sex + "\n年龄:" + p.age);
Console.ReadKey();
}
}
}
2)静态构造
静态构造函数用于初始化类中的静态数据或执行仅需执行一次的特定操作。
静态构造函数具有以下特性:
静态构造函数不使用访问权限修饰符修饰或不具有参数;
类或结构体中只能具有一个静态构造函数;
静态构造函数不能继承或重载;
静态构造函数不能直接调用,仅可以由公共语言运行时 (CLR) 调用;
用户无法控制程序中静态构造函数的执行时间;
在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数以初始化类;
静态构造函数会在实例构造函数之前运行。
例:
using System;
namespace Note
{
class People
{
public static int num = 1;
public People()
{
num = 2;
}
static People()
{
num = 3;
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine(People.num);
People p = new People();
Console.WriteLine(People.num);
Console.ReadKey();
}
}
}
3)私有构造
私有构造函数是一种特殊的实例构造函数,通常用在只包含静态成员的类中。如果一个类中具有一个或多个私有构造函数而没有公共构造函数的话,那么其他类(除嵌套类外)则无法创建该类的实例。
析构函数
C# 中的析构函数(也被称作“终结器”)同样是类中的一个特殊成员函数,主要用于在垃圾回收器回收类实例时执行一些必要的清理操作。
C# 中的析构函数具有以下特点:
析构函数只能在类中定义,不能用于结构体;
一个类中只能定义一个析构函数;
析构函数不能继承或重载;
析构函数没有返回值;
析构函数是自动调用的,不能手动调用;
析构函数不能使用访问权限修饰符修饰,也不能包含参数。
析构函数的名称同样与类名相同,不过需要在名称的前面加上一个波浪号~作为前缀。
class People
{
~ People(){}
}
接口
接口可以看作是一个约定,其中定义了类或结构体继承接口后需要实现功能,接口的特点如下所示:
接口是一个引用类型,通过接口可以实现多重继承;
接口中只能声明"抽象"成员,所以不能直接对接口进行实例化;
接口中可以包含方法、属性、事件、索引器等成员;
接口中成员的访问权限默认为 public,所以我们在定义接口时不用再为接口成员指定任何访问权限修饰符,否则编译器会报错;
在声明接口成员的时候,不能为接口成员编写具体的可执行代码,也就是说,只要在定义成员时指明成员的名称和参数就可以了;
接口一旦被实现(被一个类继承),派生类就必须实现接口中的所有成员,除非派生类本身也是抽象类。
声明接口
interface 接口名字
{
//方法、属性、事件、索引器等成员
}