仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 796|回复: 9
打印 上一主题 下一主题

[学习教程] NET网页编程之C#托付进修(一):C#中为何要引进托付

[复制链接]
小魔女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:20:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
其实Java之所以在曾经独步天下,就是因为他的跨平台、安全性,这两方面,效率可不是Java的强项,反而是他最短的一块挡板,虽然net总是用理论证明比.NET快。弁言:
关于一些刚打仗C#不久的伴侣大概会对C#中一些基础特征了解的不是很深,但是这些常识也是口试时口试官常常会问到的成绩,以是我以为有需要和一些打仗C#不久的伴侣分享下关于C#基本常识的文章,以是有了这个系列,但愿经由过程这个系列让伴侣对C#的基本常识了解可以更进一步。但是托付又是C#基本常识中对照主要的一点,基础上前面的特征都和托付有点干系,以是这里就和人人先说说托付,为何我们必要托付。

1、C#托付是甚么的?
在正式先容托付之前,我想下看看生存中托付的例子——生存中,假如假如我们必要打讼事,在法庭上是由状师为我们辩解的,但是状师真真实行的是当事人的陈词,这时候候状师就是一个托付工具,当事人托付状师这个工具往帮本人辩解。这就是我们生存中托付的例子的。但是C#中托付的观点也就比如状师工具(从中能够得出托付是一个类,,由于只要类才有工具的观点,从而也表现了C#是面向工具的言语)。

先容完生存中托付是个甚么后,如今就看看C#中的托付如何和生存中的工具接洽起来的,C#中的托付相称于C++中的函数指针(假如之前学过C++就晓得函数指针是个甚么观点的了),函数指针是用指针猎取一个函数的出口地点,然后经由过程这个指针来完成对函数的操纵。C#中的托付相称于C++中的函数指针,也就说二者是有区分的:托付是面向工具的,范例平安的,是援用范例(入手下手就说了托付是个类),以是在利用托付时起首要界说——>声明——>实例化——>作为参数传送给办法——>利用托付。上面就详细看下怎样利用托付的:

1、界说:delegatevoidMydelegate(type1para1,type2para2);
2、声明:Mydelegated;
3、实例化:d=newMydelegate(obj.InstanceMethod);(把一个办法传送给托付的机关器),后面三步就比如机关一个状师工具,办法InstanceMethod比如是当事人。
4、作为参数传送给办法:MyMethod(d);(托付完成把办法作为参数传进到另外一个办法,托付就是一个包装办法的工具)。
5、在办法中利用托付。MyMethod办法比如是法官,MyMethod办法先挪用托付,托付在挪用办法InstanceMethod,这个历程就如法官向状师问话,然后状师之前一定向当事人懂得结案件的情形。C#托付中比如是状师,真真诉说案情的是当事人(真真被挪用的是实例办法InstanceMethod)

MyMethod办法的界说以下:
privatevoidMyMethod(Mydelegatemydelegate)
{
//利用托付
mydelegat(arg1,arg2);
}

2、C#中为何要利用托付的?
信任经由下面的先容,人人应当对托付不再生疏了吧,但是我们为何必要托付的,好好地为何要实例化两头这个工具的,为何不间接在MyMethod办法内里挪用InstanceMethod办法的,如许不是自找贫苦的吗?为了人人能够更好的分明为何要利用托付,上面经由过程一个WindowForm的”笔墨缮写员“程序要注释下为何。

程序完成的功效是:鄙人方文本框输出笔墨,勾选“誊写到”组合框中的“文本区1”或“文本区2”复选框后点击“入手下手”按钮,程序会主动将文本框中的笔墨”缮写“到对应的文本区中往。程序界面以下:


传统的完成代码为:
namespace笔墨缮写员
{
publicpartialclassForm1:Form
{
publicForm1()
{
InitializeComponent();
}

privatevoidbutton1_Click(objectsender,EventArgse)
{
if(checkBox1.Checked==true)
{
textBox1.Clear();
textBox1.Refresh();
//挪用办法WriteRichTextBox1想文本区1写进笔墨
this.WriteTextBox1();
textBox3.Focus();
textBox3.SelectAll();
}
if(checkBox2.Checked==true)
{
textBox2.Clear();
textBox2.Refresh();
//挪用办法WriteRichTextBox2想文本区2写进笔墨
this.WriteTextBox2();
textBox3.Focus();
textBox3.SelectAll();
}
}

privatevoidWriteTextBox1()
{
stringdata=textBox3.Text;
for(inti=0;i<data.Length;i++)
{
textBox1.AppendText(data.ToString());
//间歇延时
DateTimenow=DateTime.Now;
while(now.AddSeconds(1)>DateTime.Now)
{}
}
}

privatevoidWriteTextBox2()
{
stringdata=textBox3.Text;
for(inti=0;i<data.Length;i++)
{
textBox2.AppendText(data.ToString());
//间歇延时
DateTimenow=DateTime.Now;
while(now.AddSeconds(1)>DateTime.Now)
{}
}
}
}
}

但是我们从代码中会发明WriteTextBox1()办法和WriteTextBox2()只要一行代码纷歧样的(textBox1.AppendText(data.ToString());和textBox2.AppendText(data.ToString());),其他都完整一样,而这条语句的不同就在于向个中写进文本的控件工具纷歧样,一个是TextBox1和TextBox2,如今如许代码是完成了功效,带式我们试想下,假如要完成一个写进的文本框不止2个,而是好几十个乃至更多,那末不久要写出一样多半量的用于写进文本区的办法了吗?如许就不能不写反复的代码,招致代码的可读性就差,如许写代码也就是面向历程的一个编程体例,由于函数是对操纵历程的一个封装,要办理这个成绩,天然我们就想到面向工具编程,此时我们就会想到把变更的部分封装起来,然后再把封装的工具作为一个工具传送给办法的参数,上面就使用托付来从头完成下这个程序:
namespace笔墨缮写员
{
publicpartialclassForm1:Form
{
//界说托付
privatedelegatevoidWriteTextBox(charch);
//声明托付
privateWriteTextBoxwriteTextBox;

publicForm1()
{
InitializeComponent();
}

privatevoidbutton1_Click(objectsender,EventArgse)
{
if(checkBox1.Checked==true)
{
textBox1.Clear();
textBox1.Refresh();
//实例化托付
writeTextBox=newWriteTextBox(WriteTextBox1);
//作为参数
WriteText(writeTextBox);

textBox3.Focus();
textBox3.SelectAll();
}
if(checkBox2.Checked==true)
{
textBox2.Clear();
textBox2.Refresh();
//实例化托付
writeTextBox=newWriteTextBox(WriteTextBox2);
//作为参数
WriteText(writeTextBox);

textBox3.Focus();
textBox3.SelectAll();
}
}

privatevoidWriteText(WriteTextBoxwritetextbox)
{
stringdata=textBox3.Text;
for(inti=0;i<data.Length;i++)
{
//利用托付
writetextbox(data);
DateTimenow=DateTime.Now;
while(now.AddSeconds(1)>DateTime.Now)
{}
}
}

privatevoidWriteTextBox1(charch)
{
textBox1.AppendText(ch.ToString());
}
privatevoidWriteTextBox2(charch)
{
textBox2.AppendText(ch.ToString());
}
}
}

引进托付后完成的代码中,我们经由过程WriteText办法来向文本区写进内容,它所实行的只是笼统的”写文本“操纵,至于事实像谁人文本框写进笔墨,关于编写WriteText办法的程序来讲是不晓得,托付writeTextBox就像一个接口一样(面向工具计划准绳中有一个很主要的准绳就是——针对接口编程,不针对完成编程),屏障了操纵工具的不同(办法究竟是想向文本区1写进文本仍是像文本区2写进文本,如今我办法内里不必要往体贴,我只必要会合在完成”誊写文本”这个操纵,而不用纠结操纵工具的选择)。

3、托付的感化究竟是甚么?——托付总结陈词
信任经由过程下面两部分人人也分明了托付是个甚么器材和C#中为何要引进托付这个观点。如今就总结下引进托付后究竟感化在那边?从下面的托付代码中能够发明,引进托付后,编程职员能够把办法的援用封装在托付工具中(把历程的挪用转化为工具的挪用,充实表现了托付增强了面向工具编程的头脑。),然后把托付工具传送给必要援用办法的代码,如许在编译的过程当中我们其实不晓得挪用了哪一个办法,如许一来,C#引进托付机制后,使得办法声明和办法完成的分别,充实表现了面向工具的编程头脑。

托付对本人的总结:
我是一个特别的类,我界说了办法的范例,(就像int界说了数字范例一样,当用一个办法实例化托付工具时,这个托付就代表一个办法,这个办法的范例就是托付范例),我能够将办法当作另外一个办法的参数来举行传送,使得程序更简单扩大。我认为,可以通过更加简单的首次编译,而增加第二次编译的负担,来提高java的运行效率。只是将java源代码进行简单的等价转换,而不假设编译成某种虚拟机器的目标格式,而由本地编译器针对性的二次编译。
谁可相欹 该用户已被删除
沙发
发表于 2015-1-18 13:01:03 | 只看该作者
ASP是把代码交给VBScript解释器或Jscript解释器来解释,当然速度没有编译过的程序快了。
莫相离 该用户已被删除
板凳
发表于 2015-1-18 13:01:03 来自手机 | 只看该作者
大哥拜托,Java在95年就出来了,微软垄断个妹啊,服务器市场微软完全是后后来者,当年都是Unix的市场,现在被WindowsServer和Linux抢下大片,包括数据库也一样。
因胸联盟 该用户已被删除
地板
发表于 2015-1-26 14:06:49 | 只看该作者
微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。
愤怒的大鸟 该用户已被删除
5#
发表于 2015-2-4 20:08:01 | 只看该作者
是指转换后的Servlet程序代码的行数。这给调试代码带来一定困难。所以,在排除错误时,可以采取分段排除的方法(在可能出错的代码前后输出一些字符串,用字符串是否被输出来确定代码段从哪里开始出错)。
活着的死人 该用户已被删除
6#
发表于 2015-2-10 06:42:17 | 只看该作者
平台无关性是PHP的最大优点,但是在优点的背后,还是有一些小小的缺点的。如果在PHP中不使用ODBC,而用其自带的数据库函数(这样的效率要比使用ODBC高)来连接数据库的话,使用不同的数据库,PHP的函数名不能统一。这样,使得程序的移植变得有些麻烦。不过,作为目前应用最为广泛的一种后台语言,PHP的优点还是异常明显的。
再现理想 该用户已被删除
7#
发表于 2015-3-1 03:17:04 | 只看该作者
由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。
老尸 该用户已被删除
8#
发表于 2015-3-10 12:42:52 | 只看该作者
是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。
小魔女 该用户已被删除
9#
 楼主| 发表于 2015-3-17 07:12:34 | 只看该作者
ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。
小妖女 该用户已被删除
10#
发表于 2015-3-24 02:22:52 | 只看该作者
最强的技术支持WebService,而且有.NET的所有library做后盾。而且ASP.NET在.NET3.5中还有微软专门为AJAX开发的功能--ASP.NETAJAX。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-21 14:43

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表