百科狗-知识改变命运!
--

c++和c#有什么区别?

百变鹏仔1年前 (2023-12-22)阅读数 7#综合百科
文章标签对象通道

抄来的:

C#是用来做应用程序和软件的,优点就是快速开发,有功能强大的.NET FRAMEWORK的支持.

而C/C++是用来做系统程序的,(也能做应用软件,但没有C#方便),优点很多,比其它的高级语言更容易对内存,以及作系统底层相关的开发,比起汇编语言,它具有良好的可移植性.

就看你是想发展哪方面了,还有一点不得不说,C#主要在microsoft Visual stdio.net下得以应用,目前不能在linux以及其它的操作系统下用(因为据我所知C#编译器只是在集成在.NET环境下有,其它的没有听说过),而且microsoft开发出来.net时说.net会牛十年,所以那个时候C#可能就不像现在这样作为市场上的主流开发语言了,它的结果如何谁也不知道,但是C/C++是纯粹就是一门计算机高级编程语言(其实它应该是介于汇编语言和高级语言之间的计算机编程语言),它没有局限在任何的OS,编译器,再加上其它强大的开发能力,是不会被淘汰的,计算机编程语言发展的规则是向更高级,易开发,更方便的方向发展的,不会再发展出一个像C一样的系统底层开发语言,所以学好C/C++还是很必要的,但如果你不想做这些系统底层开发工作,也就不用对C进行太深入地研究了,在编程方面应该对算法以及数据结构进行深入学习.

现在的高级语言如C#,主要把它的语法,也就是编程方法学会,然后对其编程机制进行一些学习就够了,重要的是其它的东西,如学C#更重要是的对.NET FRAMEWORK机制的了解,大部分的高级语言(C/C++/JAVA例外)就是这样,其实并不是特别特别重要,关键是编程思想

几种方法?什么意思?

一.Remoting 有两种通道:

1.TcpChannel通道

2.Http通道类型

二.远程对象的激活方式

1.服务器端激活,又称 WellKnow 方式。服务器端激活又分为SingleTon和SingleCall两种模式。SingleTon模式:此为有状态模式。如果设置为SingleTon激活方式,则Remoting将为所有客户端建立同一个对象实例。当对象处于活动状态时,SingleTon实例会处理所有后来的客户端访问请求,而不管它们是同一个客户端,还是其他客户端。SingleTon实例将在方法调用中一直维持其状态。举例来说,如果一个远程对象有一个累加方法(i=0;++i),被多个客户端(例如两个)调用。如果设置为SingleTon方式,则第一个客户获得值为1,第二个客户获得值为2,因为他们获得的对象实例是相同的。如果熟悉Asp.Net的状态管理,我们可以认为它是一种Application状态。

SingleCall模式:SingleCall是一种无状态模式。一旦设置为SingleCall模式,则当客户端调用远程对象的方法时,Remoting会为每一个客户端建立一个远程对象实例,至于对象实例的销毁则是由GC自动管理的。同上一个例子而言,则访问远程对象的两个客户获得的都是1。我们仍然可以借鉴Asp.Net的状态管理,认为它是一种Session状态。

2.客户端激活。与WellKnown模式不同,Remoting在激活每个对象实例的时候,会给每个客户端激活的类型指派一个URI。客户端激活模式一旦获得客户端的请求,将为每一个客户端都建立一个实例引用。SingleCall模式和客户端激活模式是有区别的:首先,对象实例创建的时间不一样。客户端激活方式是客户一旦发出调用的请求,就实例化;而SingleCall则是要等到调用对象方法时再创建。其次,SingleCall模式激活的对象是无状态的,对象生命期的管理是由GC管理的,而客户端激活的对象则有状态,其生命周期可自定义。其三,两种激活模式在服务器端和客户端实现的方法不一样。尤其是在客户端,SingleCall模式是由GetObject()来激活,它调用对象默认的构造函数。而客户端激活模式,则通过CreateInstance()来激活,它可以传递参数,所以可以调用自定义的构造函数来创建实例。

根据激活模式的不同,通道类型的不同服务器端的实现方式也有所不同。大体上说,服务器端应分为三步:

1、注册通道

要跨越应用程序域进行通信,必须实现通道。如前所述,Remoting提供了IChannel接口,分别包含TcpChannel和HttpChannel两种类型的通道。这两种类型除了性能和序列化数据的格式不同外,实现的方式完全一致,因此下面我们就以TcpChannel为例。

注册TcpChannel,首先要在项目中添加引用“System.Runtime.Remoting”,然后using名字空间:System.Runtime.Remoting.Channel.Tcp。代码如下:

TcpChannel channel = new TcpChannel(8080);

ChannelServices.RegisterChannel(channel);

在实例化通道对象时,将端口号作为参数传递。然后再调用静态方法RegisterChannel()来注册该通道对象即可。

2、注册远程对象

注册了通道后,要能激活远程对象,必须在通道中注册该对象。根据激活模式的不同,注册对象的方法也不同。

(1) SingleTon模式

对于WellKnown对象,可以通过静态方法RemotingConfiguration.RegisterWellKnownServiceType()来实现:RemotingConfiguration.RegisterWellKnownServiceType(

typeof(ServerRemoteObject.ServerObject),

"ServiceMessage",WellKnownObjectMode.SingleTon);

(2)SingleCall模式

注册对象的方法基本上和SingleTon模式相同,只需要将枚举参数WellKnownObjectMode改为SingleCall就可以了。RemotingConfiguration.RegisterWellKnownServiceType(

typeof(ServerRemoteObject.ServerObject),

"ServiceMessage",WellKnownObjectMode.SingleCall);

(3)客户端激活模式

对于客户端激活模式,使用的方法又有不同,但区别不大,看了代码就一目了然。

RemotingConfiguration.ApplicationName = "ServiceMessage";

RemotingConfiguration.RegisterActivatedServiceType(

typeof(ServerRemoteObject.ServerObject));

为什么要在注册对象方法前设置ApplicationName属性呢?其实这个属性就是该对象的URI。对于WellKnown模式,URI是放在RegisterWellKnownServiceType()方法的参数中,当然也可以拿出来专门对ApplicationName属性赋值。而RegisterActivatedServiceType()方法的重载中,没有ApplicationName的参数,所以必须分开。

3、注销通道

如果要关闭Remoting的服务,则需要注销通道,也可以关闭对通道的监听。在Remoting中当我们注册通道的时候,就自动开启了通道的监听。而如果关闭了对通道的监听,则该通道就无法接受客户端的请求,但通道仍然存在,如果你想再一次注册该通道,会抛出异常。

//获得当前已注册的通道;

c++和c#有什么区别?

IChannel[] channels = ChannelServices.RegisteredChannels;

//关闭指定名为MyTcp的通道;

foreach (IChannel eachChannel in channels)

{

if (eachChannel.ChannelName == "MyTcp")

{

TcpChannel tcpChannel = (TcpChannel)eachChannel;

//关闭监听;

tcpChannel.StopListening(null);

//注销通道;

ChannelServices.UnregisterChannel(tcpChannel);

}

}

代码中,RegisterdChannel属性获得的是当前已注册的通道。在Remoting中,是允许同时注册多个通道的。

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)