一、定义类、实例化对象、赋值、取值
***定义类
语法:
class 类名
{
//类里面可以定义字段/成员,可以定义方法
public string name;
void Study()
{
Console.WriteLine("......")
}
//成员的数据可以是任意自定义类型
}
***实例化对象
语法:
类名 对象名 = new 类名();
例:Car car = new Car();//通过new来实例化
***给对象的字段赋值
语法:
对象名.字段名=...
例:car.brand = "BMW";
***取值
语法:
对象名.字段名
例1:string brand=car.brand;//取值出来并赋给一个变量
例2: Console.WriteLine("品牌:{0},颜色:{1},价格:{2}", car.brand, car.color, car.price);
--------------------------------------------------
二、访问修饰符
1.public:公有的,完全公开,在任何地方都可以访问
2.private:私有的,只能在类里面可以访问;
不写,默认就是private
3.protected:保护类型,只能在该类里面和它的子类(继承类)中访问
4.internal:只能在包含它的程序集中访问
5.protected internal:只能在包含它的程序集和它的子类中可以访问
***自定义类型的访问修饰符有俩种:public和internal。 不写,默认就是internal
--------------------------------------------------
三、方法的定义、使用
***方法的定义
语法:
[访问修饰符] 返回值类型 方法名(参数列表)
{
方法语句块的代码
}
***this关键词
当变量名冲突时,通过this.成员名把它们区分开。this就代表当前这个对象,也就说:哪个对象使用这个方法,this就是谁
例:
public void SetHeight(double height)
{
this.height = height;
}
***void、return
无返回值的方法,返回值类型用void表示。
有返回值的方法,在语句块中用return来返回值。
***方法的调用
调用无返回值的方法,直接对象名打点使用
例:stu1.Study(DateTime.Now);
调用有返回值的方法,还要定义对应类型的变量来接收方法的返回值
例:string msg = stu1.Eat(DateTime.Now);
---------------------------------------------------
四、构造函数、构造函数的重载
***构造函数
构造函数是一种的特殊的方法,用于数据类型的实例化new,当创建类或结构的对象时会自动调用构造函数。
类都有一个默认的构造函数public MyMath(){},默认的构造函数自动生成,是看不到的。当我们自己手动的写了构造函数之后默认的构造函数就会消失。
例:
//构造函数没有返回值
public MyMath()//构造函数的名称和类的名称相同
{ }
***构造函数的重载
重载:方法名相同,参数个数或参数的数据类型不同
例:
//自己定义一个构造函数
public MyMath(int a)
{
this.a = a;
b = 10;
}
---------------------------------------------------
五、params关键词、方法的参数和返回值的类型
***params关键词
params关键词声明,可以采用长度变化的参数。
params int[]能自动把传进来的值转换成一个数组。
例:public int Sum2(params int[] array)
{......}
***方法的参数和返回值的类型可以是任意类型
例:public List<int> List(int a, int b, int c)
{......}
---------------------------------------------------
六、值传递、引用传递(ref、out)
***值传递
传递参数的默认机制:值传递。
变量的值传到方法里面时,是复制了一个副本,在方法内部实际上是对副本进行的一个操作,所以对方法外部变量的值没有任何影响。
例:
public void Fun(int i)
{
i += 100;
}
int i = 10;
math3.Fun(i);
Console.WriteLine("值传递变量i本身的值不变,依然是{0}", i);//10
***引用传递
引用传递传的是变量的内存地址。
变量在方法内的改变会影响方法外的值。
例1:
public void Fun(ref int i)
{
i += 100;
}
math3.Fun(ref i);//ref引用传递,传参时要写上ref关键词
//ref声明的参数,传值之前必须赋初值
Console.WriteLine("ref声明引用传递,变量i本身的值变化为{0}", i);
例2:
public int Fun2(int a, int b, out int min)
{
min = a < b ? a : b;
return a + b;
}
int min;
//out输出参数,只输出不输入(不用传初值),传值时也要写上out关键词,也是引用传递
result = math3.Fun2(10, 20, out min);
Console.WriteLine("俩个数的较小值为:{0}",min);
一、属性
***属性语法
例:
string no;//字段成员的作用就是用来保存数据的
public string No//属性名首字母要大写
{
//get和set可以理解成方法,它们会在利用属性赋值和取值时自动调用
get { return no; }//数据存放在字段中,所以要return字段
set { no = value; }//value表示做赋值操作时传进来的值
}
***通过属性进行赋值和取值时,可以做些逻辑操作
例:
string address;
//取值时,如果地址长度大于10个字符,那么先截取前10个字符,拼接“...”,再取值
public string Address
{
get
{
if (address.Length > 10)
{
address=address.Substring(0, 10) + "...";
}
return address;
}
set { address = value; }
}
***属性的简写方式
例:
string tel;
public string Tel
{
//采用简写方式必须要通过属性来赋值
get ;//取值赋值的简写方式
set ;
}
***只读属性
string remark="五好学生";
//只读属性
public string Remark
{
get { return remark; }
}
--------------------------------------------------------------------
二、索引器
***定义索引器语法:
访问修饰符 返回类型 this[参数列表]
{
...
}
例:
public AddressBook this[int index]
{
...
}
***索引器可以重载
public AddressBook this[string no]
{
get
{
//遍历所有元素,找匹配项
foreach (AddressBook item in list)
{
if (item.No == no)
{
//编号相等,说明是匹配项
return item;
}
}
return null;//没有匹配项,返回空
}
}
***索引器可以根据多个条件进行查询
public AddressBook this[string name, string sex]
{
get
{
foreach (AddressBook item in list)
{
if (item.Name == name && item.Sex == sex)
{
return item;
}
}
return null;
}
}
-----------------------------------------------------------------------
三、递归算法
***递归的思想:自身调用自身!
***注意:不能无限制的调用,不然会成为死循环,递归算法要有出口(停止调用自身的时候)!
例1:
//计算5+4+3+2+1的值
n+(n-1)+(n-2)+...+2+1
public int Sum(int n)
{
//递归算法要有一个出口(停止调用自身的时候)
if (n == 1)
{
return 1;
}
return n + Sum(n - 1);
}
MyMath mm = new MyMath();
Console.WriteLine(mm.Sum(8));
例2:
//古典问题:有一对兔子,从出生开始到第三个月可以生一对兔子,新出生小兔子到第三个月也可以生兔子。具有生育能力后,每月都能生一对
//问:到第N个月有多少对兔子?
public int tuzi(int n)
{
if (n <=2 )
{
return 1;
}
return tuzi(n - 2) +tuzi(n - 1);
}
Console.WriteLine(mm.tuzi(6))
例3:
public string Pa(string n)
{
if(!n.Contains(" "))
{
return n;
}
return Pa(n.Replace(" ", " "));
}
string str = "q w e r";
Console.WriteLine(mm.Pa(str));
|
|