C#学习笔记5_封装_函数总结
一、封装
1.访问修饰符:(定义一个类成员的范围和可见性)
a、
public:所有对象都可以访问
Public 访问修饰符允许一个类将其成员变量和成员函数暴露给其他的函数和对象。任何公有成员可以被外部的类访问。
b、
private:对象本身在对象内部可以访问
Private 访问修饰符允许一个类将其成员变量和成员函数对其他的函数和对象进行隐藏。**只有同一个类中的函数可以访问它的私有成员。**即使是类的实例也不能访问它的私有成员。
c、
**protected:**只有该类对象及其子类对象可以访问
访问修饰符允许子类访问它的基类的成员变量和成员函数。这样有助于实现继承。我们将在继承的章节详细讨论这个
如果没有指定访问修饰符,则使用类成员的默认访问修饰符,即为 private。
d、
函数前面加static,说明这是一个静态函数,只能被类调用,而不能被类的对象调用。
二、参数
2.1、方法参数的类型值类型和引用类型
a、当方法传递的参数是值类型时,变量的栈数据会完整地复制到目标参数中即实参和形参中的数据相同但存放在内存的不同位置。
b、当方法传递的参数是引用类型时,只是将变量的引用复制到目标参数中,实参和形参的引用指向内存中的同一位置。所以,在目标方法中对形参所做的更改会影响调用者的初始变量。
2.2、特殊的方法参数
1、引用参数—ref (使值类型的变量做方法参数时也可以传引用)
一些数据类型(例如类,数组等引用类型)作为方法的参数时默认是传引用的,大多数数据类型(例如结构,整数类型等值类型)在作为方法的参数时是传值的。那么,如何使值类型的数据作为方法参数时传递的也是引用呢?
方法很简单,只需要在形参的数据类型前加上关键字ref,并在调用时相应地实参前也加上关键字ref即可。
例如:
void Swap(ref String first,ref String second)
{
......
}
String a = "dddd",b="dbbb";
Swap(ref a,ref b);
//注意:ref参数必须是可以赋值的变量
2、输出参数—out
除了将参数单向传入一个方法(传值),或同时将参数传入和传出一个方法(传引用)之外,还可以将数据从一个方法内部单向传出方法。为此,代码需要使用关键字out来修饰参数类型。
例如:
int x;
func(out x)
//out参数必须是可以赋值的变量,在调用func方法前对out参数赋不赋值都可以
void func(out int x)
// 在此方法中,在使用out参数x之前必须对其赋值,即使在调用此方法前已经对out参数x赋值了,在此方法中仍吧x看做未赋值的变量。
3、参数数组—params(可以将相同类型,数量可变的多个参数传给一个方法)
引入:一般,参数的数量都是由目标方法声明所确定。
然而,有时我们希望参数的数量是可变的或许最好的方法是为方法传一个数组。
然而,这会使调用代码变得稍微复杂一些,因为需要事先构造一个数组,再将这个数组作为参数来传递。
为了简化代码,c#提供了一个特殊的关键字,它允许在调用一个方法是提供数量可变的参数,而不是由方法事先固定好参数的数量。
class Program
{
public static void func(params string[] args)
{
switch(args.Length)
{
case 0:
Console.WriteLine("没有参数");
break;
case 1:
Console.WriteLine("有一个参数");
break;
default:
Console.WriteLine("多于一个参数");
break;
}
}
static void Main(string[] args)
{
string a = "aaa",b="bbb";
string [] c = {"c","d"};
func();
func(a);
func(c);
func(a,b);
Console.ReadLine();
}
}