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+"\t");

}

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+"\t");

}

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值