20131117-练习面向对象

[1] //1.请将字符串数组{ "中国", "美国", "巴西", "澳大利亚", "加拿大" }中的内容反转。然后输出反转后的数组。不能用数组的Reverse()方法。

string[] strArray = { "中国", "美国", "巴西", "澳大利亚", "加拿大" };

string temp = "";

for (int i = 0; i < strArray.Length/2; i++)

{

temp = strArray[i];

strArray[i] = strArray[strArray.Length - 1 - i];

strArray[strArray.Length - 1 - i] = temp;

}

foreach (var item in strArray)

{

Console.Write(item+" ");

}

Console.ReadKey();

 

[2] //随机生成101-100内的非重复数字放入ArrayList集合中

ArrayList array = new ArrayList();

Random r = new Random();

while (array.Count<10)

{

//Random r = new Random();不要放在这

int num = r.Next(1, 101);

if (!array.Contains(num))

{

array.Add(num);

}

}

foreach (var item in array)

{

Console.Write(item+" ");

}

Console.ReadKey();

[3]//遍历窗体控件,给所有的label赋值

foreach (Control item in this.Controls)

{

if (item is Label)//当前的控件是不是label

{

item.Text = "";

}

}

[4] public class Student

{

 

string _name;

int _age;

char _gender;

public Student() { }

//类中如果没有写构造函数,则默认有一个无参数的构造函数

//类中如果写了一个有参数的构造函数,那么此时类中只有一个构造函数,原来无参数的构造函数被干掉了

public Student(string name, int age, char gender)

{

this.Name = name;

this.Age = age;

this.Gender = gender;

}

public string Name

{

get { return _name; }

set { _name = value; }

 

}

public int Age

{

get { return _age; }

set { _age = value; }

}

public char Gender

{

get { return _gender; }

set { _gender = value; }

}

public void SayHi()

{

Console.WriteLine("我是学生");

}

}

[5]猜拳游戏

[6]封装、继承、多态;字段、属性、索引;访问权限;引用、命名空间;变量作用域

[*]

 

[*]

private :自己类可以访问

protected :自己类及子类可访问

internal:本程序集内可访问,本程序集—一个项目即一个程序集

protected internal:具体情况 具体分析,二者修饰的权限是一个并集不是交集

①能被类的子类所访问(不管这个子类在哪个程序集里)

②并且能被同一个程序集的类所访问

public:任何地方皆可访问

注意:

类的内部的成员,只要没有访问修饰符,默认就是private。

类的默认访问权限是internal

修饰类的访问修饰符只能有两种:public internal。

[*]基础班相关笔记:

1、访问修饰符

public:公开的,公共的,在哪都能访问到

private:表示私有的,只能在当前类的内部才能够访问到

internal:只能在当前项目中访问。

 

2、this:

1)、代表当前类的对象

2)、调用当前类的构造函数

 

 

3、类是不占内存的,而对象是占内存的。

 

4、静态和非静态的区别

问:非静态类中,能不能出现静态成员?

答:在非静态类中,可以出现静态的成员。

 

静态方法中只能够访问到静态的成员,而不-能访问到非静态的成员。

在非静态的方法中可以访问到静态的成员。

 

 

问:在静态类中,能不能够出现非静态成员?

答:在静态类中不能出现非静态成员。只能有静态成员。

 

静态成员和非静态成员调用上的区别:

非静态成员在调用的时候,使用对象.非静态成员();的方式进行调用

而静态成员在调用的时候,使用类名.静态成员();的方法进行调用

 

注意:静态类是不允许被实例化的。

 

 

 

什么时候使用静态类,什么时候使用非静态类。

1、我们一般把静态类作为一个工具类来使用。Console

2、静态类的资源在全局中是共享的。

3、静态类只有在程序结束的时候才释放资源。

 

5、继承

继承解决的问题就是减少冗余代码。

 

Student类和Teacher类继承了Person类,我们管Student类和Teacher类叫做子类,管Person类叫做父类。

或者 我们管Student类和Teacher类叫做派生类,管person叫做基类。

 

父类只能使用自己的成员,不能使用子类的成员,而子类既可以使用父类的成员,也可以使用自己的成员。

 

子类究竟从父类那里继承过来了什么?

 

子类并没有继承父类的私有字段。【有争议,个人认为继承了,但不能访问。理由:子类继承了父类的属性这是没有争议的,但属性本质上是方法,不存储数据,存储数据的是与属性相关连的字段。合理的设计属性与字段是捆绑存在的。】

子类也没有继承父类的构造函数。

子类继承了父类的属性、方法.

 

子类会默认的调用父类当中那个默认的无参数的构造函数,当咱们在父类中写了新的构造函数之后,

原来那个默认的无参数的构造函数就被干掉了,此时,子类调不到父类中无参数的构造函数,就报错了。

解决办法有两个

1)、在父类中重新添加一个无参数的构造函数

2)、在子类中显示的去调用父类中的构造函数。:base

 

单根性:一个类只能有一个父类。

传递性:

 

 

 

6、里氏转换

1)、子类可以赋值给父类,如果有一个地方,需要一个父类类型的参数,那么你可以给一个子类类型的参数

2)、如果父类中装的是子类对象,那么可以,将这个父类强转为对应的子类对象。

 

 

7、is和as的用法

is:表示转换,如果能够转换成功,则返回一个true,否则返回一个false。

as: 表示转换,如果转换成功,则返回对应的对象,否则返回一个null。

 

 

[7] //索引

public class Person

{

public string this[int index]

{

get

{

string str = "";

switch (index)

{

case 0: str = this._name; break;

case 1: str = this._age.ToString(); break;

case 2: str = this._gender.ToString(); break;

}

return str;

}

}

 

string _name;

 

public string Name

{

get { return _name; }

set { _name = value; }

}

int _age;

 

public int Age

{

get { return _age; }

set { _age = value; }

}

char _gender;

 

public char Gender

{

get { return _gender; }

set { _gender = value; }

}

}

[8继承案例]

namespace _13继承案例

{

public class Person

{

 

public Person(string name,int age,char gender)

{

this._name = name;

this._age = age;

this._gender = gender;

}

public Person(string name):this(name,0,'')

{

// this._name = name;

}

public Person(string name,int age):this(name,age,'')

{ }

public Person()

{ }

 

protected string _name;

//如果字段的前面修饰符是protected ,本类中,子类中都可以访问

public string Name

{

get { return _name; }

set { _name = value; }

}

char _gender;

 

public char Gender

{

get { return _gender; }

set { _gender = value; }

}

int _age;

 

public int Age

{

get { return _age; }

set { _age = value; }

}

public virtual void SayHello()

{

Console.WriteLine("我叫==================={0}", this.Name);

// Console.WriteLine();

}

}

}

namespace _13继承案例

{

public class Student:Person

{

 

public Student(string name,int age,char gender,double score):base(name,age,gender)

{

this._score = score;

}

double _score;

 

public double Score

{

get { return _score; }

set { _score = value; }

}

 

}

}

namespace _13继承案例

{

class Teacher:Person

{

public Teacher(string name,int age,char gender,double salary):base(name,age,gender)

{

this._salary = salary;

 

}

 

double _salary;

 

public double Salary

{

get { return _salary; }

set { _salary = value; }

}

public void SayHello()

{

this.SayHello();

Console.WriteLine("这里是子类");

//Console.WriteLine("我是子类,老师{0}",this.Name);//

//base.SayHello();

}

}

}

原文地址:https://www.cnblogs.com/CharlesZHENG/p/3527508.html