首页 > 编程开发 > Objective-C编程 >
-
c++程序员快速学习c#之三
ftp下载的好处我在这里就不多说了,许多工程会把ftp下载作为一个重要的功能来实现。微软提供的WinInet类可以利用下面这些函数:
InternetOpen;
InternetConnect;
GetCurrentDirectory;
SetCurrentDirectory;
FtpGetFile;
很容易实现ftp的下载,网上关于这方面的文章也很多。但是要实现ftp的多线程下载,利用这些函数就显得有些牵强了。用socket根据ftp协议来开发将会变的十分灵活。下面我就逐步的讲解整个开发的过程:开发环境 BCB(组件模式),VC 环境下请自行稍作改动。看了这篇文章后对于BCB开发人员来说,不仅可以对 FlashGet 等软件的开发原理有一定的了解,特别是在开发组件方面也有很大的指导作用,请耐心的将它看完。很简单!!
主要用到的命令为:USER,PASS,TYPE,SIZE,REST,CWD,PWD,RETR,PASV,PORT,QUIT;
USER:参数是标记用户的Telnet串。用户标记是访问服务器必须的,此命令通常是控制连接后第一个发出的命令,有些主机还会要求口令和帐户。服务器可以在任何时间接收新的USER命令以改变访问控制和(或)帐户信息。这可以重新开始登录过程,所以传输参数不变,在进行中的文件传输在过去的访问控制参数下完成。
PASS:参数是标记用户口令的Telnet串。此糜?
abstract (抽象的):类不能实例化,只能继承,可以有抽象成员
sealed (密封的):不能继承
关键字能够相互组合。
首先需要知道一点,C#中只能有一个基类,它不支持多重继承,同时不允许派生类的可访问性比其基类更高,也就是说:内部类可以继承于公共类,反之不行,在前文也已经说过,object类是C#中最高的类,如果一个类没有基类,它就隐式的继承了object类,在类中都可以使用object提供的方法。
也许你还记得在C++中,类里面定义的方法的具体实现是在类的外部实现的,但在C#中已经不允许,C#规定所有的代码都必须在类中,所以方法的代码就只能和C++中的内联函数的格式一样,但是切记,C#中的这样写法并不意味着是内联的,在C#中已经取消了内联函数的定义,.net会在编译的时候自动确定是否内联。
从上面的例子中还能发现一个不同点就算是:在类定义结束的时候没有了分号;
从现在开始,从细节上阐述C#的不同用法:
1. 在C++的名词成员变量,在C#中称为字段,字段在C++中不能初始化,但在C#中可以直接初始化。 2. 构造函数,它于C++使用相似,但是不允许在其中给字段初始化,C#还添加了一种静态构造函数。
public class mybasicclass
{
static mybasicclass()
{
}
}
它不需要限定符,它的作用是在程序运行是对静态变量进行赋值。
3.析构函数:它和C++的概念已经完全不同了,因为C#内部有了内存自动收集机,能够对不用的内存进行回收,所以不需要在析构函数中释放内存了。也就无需析构函数,但是析构函数在派生于接口的类中函数有作用的,接口的概念后面会讲到。
4.虚拟函数:C#的虚拟函数同C++在语法上有区别,但是含义还是一样的。C#中基类的虚拟函数使用关键字virtual 在派生类中使用override。
5.运算符重载:C#中运算符重载和C++原理基本相同,但存在一些区别,区别在于有些运算符C#已经不允许重载了。不能重载的运算符有:-= , += , /= ,*= ,%=, 按位赋值运算符(&= ……) , 布尔运算符(&&……),赋值运算符(=)。
同时在C#中还有一个硬性的规定,比如重载了运算符> 就必须重载>=,重载了==,就必须重载 != 反之毅然等等。
九.异常
C#和C++的异常基本相同。C#的异常语句:
try
{
}
catch
{
}
finally
{
}
它们的不同点最主要的就是,不管是否抛出异常,最后的finally块一定马上执行。
十.不安全代码
什么是不安全代码,前面我已经说过,使用指针就是不安全代码,在C#中是可以使用指针的,而且它和C++的格式一样,但是必须放在不安全代码段中。
声名不安全代码段,使用关键字unsafe 。
例:
public unsafe int num()
{
return 0;
}
不安全代码可以是方法,类,结构。
十一.接口
在C++中是没有接口这个概念的,它是有COM演变而来。一个C#接口只是函数和属性的定义,就好比一个抽象类,它的定义和类采用相似的语法。使用关键字interface类对接口的实现是通过派生来实现的,对于接口,类可以多重继承。
后记
到这里我就准备停笔了,也许你会发现类以后的内容变的简单了,不详实了,的确这于我刚开始的初衷有些背离,但这也是有原因的。
首先就是我在写第三篇的时候发现在《C#高级编程》一书的附录部分已经有了C++程序员过渡C#的内容,而且比较详细,大家可以参看此书,我只是把里面大家经常会用到的语法进行了阐述。对于一些不常用到,大家可以通过专门的C#书籍进行详细的了解。
第二,在类之后的内容有许多讲的都是C++不具备的内容,这些内容的讲解也无法和C++进行比较来讲,所以也没有什么捷径,只能看C#的专业书籍进行学习,比如接口,委托,甚至类中的一些用法,还有我没有提到的属性,事件。
通过此文学习可以在对C#一窍不通的情况下快速通过已学知识对其有所了解和掌握,但是一门语言是博大精深的,所以学习C#在此基础上还需要看一下经典的教程,对其有一个完全明了的深入理解,同时因为C#是建立在.net环境之下,所以对.NET的机制也需要有一定的认识,最后我希望对C#有兴趣的朋友都能完美的掌握其精华,在.net的划时代历程上走出辉煌的一步。
也许你还记得在C++中,类里面定义的方法的具体实现是在类的外部实现的,但在C#中已经不允许,C#规定所有的代码都必须在类中,所以方法的代码就只能和C++中的内联函数的格式一样,但是切记,C#中的这样写法并不意味着是内联的,在C#中已经取消了内联函数的定义,.net会在编译的时候自动确定是否内联。
从上面的例子中还能发现一个不同点就算是:在类定义结束的时候没有了分号;
从现在开始,从细节上阐述C#的不同用法:
1. 在C++的名词成员变量,在C#中称为字段,字段在C++中不能初始化,但在C#中可以直接初始化。 2. 构造函数,它于C++使用相似,但是不允许在其中给字段初始化,C#还添加了一种静态构造函数。
public class mybasicclass
{
static mybasicclass()
{
}
}
它不需要限定符,它的作用是在程序运行是对静态变量进行赋值。
3.析构函数:它和C++的概念已经完全不同了,因为C#内部有了内存自动收集机,能够对不用的内存进行回收,所以不需要在析构函数中释放内存了。也就无需析构函数,但是析构函数在派生于接口的类中函数有作用的,接口的概念后面会讲到。
4.虚拟函数:C#的虚拟函数同C++在语法上有区别,但是含义还是一样的。C#中基类的虚拟函数使用关键字virtual 在派生类中使用override。
5.运算符重载:C#中运算符重载和C++原理基本相同,但存在一些区别,区别在于有些运算符C#已经不允许重载了。不能重载的运算符有:-= , += , /= ,*= ,%=, 按位赋值运算符(&= ……) , 布尔运算符(&&……),赋值运算符(=)。
同时在C#中还有一个硬性的规定,比如重载了运算符> 就必须重载>=,重载了==,就必须重载 != 反之毅然等等。