面向对象
这个学过C++的都非常熟悉了,就是用class声明嘛。在。Net中的对象的创建和c++中的大致一样,只是有点不同。
Using System; //使用名字空间
Namespace ClassLibrary {
Public class Class1{
Public Class(){ //这个是构造函数
}
}
}
和c++的差不多,这里是使用了名字空间,我估计不一定都是要使用名字空间才能定义类吧。还有就是类方法的定义有就有点烦了。书上写的每个方法前面都加上了public 、private or protected。这样的声明可是有点烦,
不知道能不能想
c
++那样声明,毕竟我还是比较看的习惯
c
++那样的形式。
对象的创建
public class Lion {
public int weight;
}
Lion zooLion = new Lion();
在c++中,使用new创建的对象更加安全,还可以使用delete回收内存空间。
这里是规定使用
new
呢?有没有
delete
呢?可不可以像
c
++哪样,直接像下面创建?
Lion zooLion;
对象的析构
据说是。Net framework 具有一个内存自动管理功能,称为垃圾回收。
使用名称空间
创建:
namespace CompanyName.Sales {
public class Customer (){}
}
书本上推荐象这样使用两层的名字空间,如前面是公司名,后面是部门。既然它推荐,我也用这个好了。
常用的名字空间
在使用。Net中,System是最重要的常用名字空间。
下面是System部分名称空间
名称空间
定义
System.Windows.Forms
提供用于创建语句微软windows应用程序的类
System.IO
提供用于向文件写数据的类
System.Data
提供用于数据访问的类
System.Web
提供用于创建web form应用程序的类
对象和方法
对象的创建说过了。对象方法的传递参数和返回大致和c++相同。只是有一点。
但要返回多个值的时候,在c++最通常的是使用指针。然而,指针在c#中认为是不安全的。(闷……)但是还是有另外一种方法可以实现,就是使用引用。
但是我学习c++的时候,老是把指针和应用混淆。这里减少了一个,也许是好事把。不过就是使用惯指针的在这里会不习惯,然而到时候再使用c++编程的时,这样换来换去挺不好受的。
不过这里使用引用的方法有点不同。
这里举个例子:
public void GetAddress(ref int number, ref string street, ref string city){
number = streetNumber;
street = streetName;
city = cityName;
}
看出在c#中不像c++中使用&的符号,是使用关键字ref。
c#中使用引用需要明确赋值,就是所有参数在传递之前一定要初始化。
重载与封装
这2个名词在学习c++中已经很熟悉了,内容也和在c++中一样,不说了
属性
这个名词很熟悉,不过刚看到它的时候不知道它在这里是做什么的。
书上的大概意思就是:
一种类成员,提供对对象或类中元素的访问。
嘿,对元素的访问,还要那么麻烦?在c++中就是使用类方法放回啊。这里是什么呢?
例子:
using System;
namespace LearningCSharp {
class Elephant {
private decimal dailyConsumptionRate;
public decimal DailyFoodIntake {
get {
return dailyConsumpitonRate;
}
set {
if(value < dailyConsumptionRate –25) {
//通知医疗中心
}
else {
dailyConsumptionRate = value;
}
}
}
}
class zoo {
static void Main(string[] args) {
Elephant e = new Elephant();
e.DailyFoodIntake = 300M;
}
}
}
在编程中,可以改变dailyConsumptionRate的类型实现不同的功能
可是具体如何实现,还不清楚
继承
例子:
public class Licon:Amimal {
public void StalkPrey(){}
}
抽象类
对基类使用abstract关键字
看到这个,我就想起c++中的虚类,它们之间有什么不同呢?
抽象一定要重新定义新的方法,虚类就可以沿用父类的。
这样可能是为了某些重要而且一定要重新定义的方法而设置吧。当然还可以保护代码。
但不重新定义新方法的时候,编译时候会出错。
密封类
当声明为抽象类的时候,就不能成为基类,就是说不能再扩展了。当然还可以应用它的方法咯。
sealed class Horse {}
这样的目的是什么呢?很明显第一个就是出于商业目的。还有就是可是调用优化执行,因为不用知道子类的虚方法。
这个嘛~个人意见还是觉得处于商业目的比较多。
多态性
就是抽象、重载和虚类咯。
觉得面向对象的总体和c++差不多。而且增加了属性和一些类。