第一篇:委托与事件的区别
委托与事件的区别
委托 和 事件在.Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易。它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去的人每次见到委托和事件就觉得心里别(biè)得慌,混身不自在。本文中,我将通过两个范例由浅入深地讲述什么是委托、为什么要使用委托、事件的由来、.Net Framework中的委托和事件、委托和事件对Observer设计模式的意义,对它们的中间代码也做了讨论。
将方法作为方法的参数
我们先不管这个标题如何的绕口,也不管委托究竟是个什么东西,来看下面这两个最简单的方法,它们不过是在屏幕上输出一句问候的话语: public void GreetPeople(string name){ // 做某些额外的事情,比如初始化之类,此处略 EnglishGreeting(name);} public void EnglishGreeting(string name){ Console.WriteLine(“Morning, ” + name);}
暂且不管这两个方法有没有什么实际意义。GreetPeople用于向某人问好,当我们传递代表某人姓名的name参数,比如说“Jimmy”,进去的时候,在这个方法中,将调用EnglishGreeting方法,再次传递name参数,EnglishGreeting则用于向屏幕输出 “Morning, Jimmy”。
现在假设这个程序需要进行全球化,哎呀,不好了,我是中国人,我不明白“Morning”是什么意思,怎么办呢?好吧,我们再加个中文版的问候方法:
public void ChineseGreeting(string name){ Console.WriteLine(“早上好, ” + name);}
这时候,GreetPeople也需要改一改了,不然如何判断到底用哪个版本的Greeting问候方法合适呢?在进行这个之前,我们最好再定义一个枚举作为判断的依据:
public enum Language{ English, Chinese } public void GreetPeople(string name, Language lang){ //做某些额外的事情,比如初始化之类,此处略 swith(lang){ case Language.English: EnglishGreeting(name);break;case Language.Chinese: ChineseGreeting(name);break;} }
OK,尽管这样解决了问题,但我不说大家也很容易想到,这个解决方案的可扩展性很差,如果日后我们需要再添加韩文版、日文版,就不得不反复修改枚举和GreetPeople()方法,以适应新的需求。
在考虑新的解决方案之前,我们先看看 GreetPeople的方法签名:
public void GreetPeople(string name, Language lang)
我们仅看 string name,在这里,string 是参数类型,name 是参数变量,当我们赋给name字符串“jimmy”时,它就代表“jimmy”这个值;当我们赋给它“张子阳”时,它又代表着“张子阳”这个值。然后,我们可以在方法体内对这个name进行其他操作。哎,这简直是废话么,刚学程序就知道了。
如果你再仔细想想,假如GreetPeople()方法可以接受一个参数变量,这个变量可以代表另一个方法,当我们给这个变量赋值 EnglishGreeting的时候,它代表着 EnglsihGreeting()这个方法;当我们给它赋值ChineseGreeting 的时候,它又代表着ChineseGreeting()方法。我们将这个参数变量命名为 MakeGreeting,那么不是可以如同给name赋值时一样,在调用 GreetPeople()方法的时候,给这个MakeGreeting 参数也赋上值么(ChineseGreeting或者EnglsihGreeting等)?然后,我们在方法体内,也可以像使用别的参数一样使用MakeGreeting。但是,由于MakeGreeting代表着一个方法,它的使用方式应该和它被赋的方法(比如ChineseGreeting)是一样的,比如: MakeGreeting(name);
好了,有了思路了,我们现在就来改改GreetPeople()方法,那么它应该是这个样子了:
public void GreetPeople(string name, *** MakeGreeting){ MakeGreeting(name);}
注意到 ***,这个位置通常放置的应该是参数的类型,但到目前为止,我们仅仅是想到应该有个可以代表方法的参数,并按这个思路去改写GreetPeople方法,现在就出现了一个大问题:这个代表着方法的MakeGreeting参数应该是什么类型的?
NOTE:这里已不再需要枚举了,因为在给MakeGreeting赋值的时候动态地决定使用哪个方法,是ChineseGreeting还是 EnglishGreeting,而在这个两个方法内部,已经对使用“morning”还是“早上好”作了区分。
聪明的你应该已经想到了,现在是委托该出场的时候了,但讲述委托之前,我们再看看MakeGreeting参数所能代表的 ChineseGreeting()和EnglishGreeting()方法的签名:
public void EnglishGreeting(string name)public void ChineseGreeting(string name)
如同name可以接受String类型的“true”和“1”,但不能接受bool类型的true和int类型的1一样。MakeGreeting的 参数类型定义 应该能够确定 MakeGreeting可以代表的 方法种类,再进一步讲,就是MakeGreeting可以代表的方法 的 参数类型和返回类型。
于是,委托出现了:它定义了MakeGreeting参数所能代表的方法的种类,也就是MakeGreeting参数的类型。
NOTE:如果上面这句话比较绕口,我把它翻译成这样:string 定义了name参数所能代表的值的种类,也就是name参数的类型。
本例中委托的定义:
public delegate void GreetingDelegate(string name);
可以与上面EnglishGreeting()方法的签名对比一下,除了加入了delegate关键字以外,其余的是不是完全一样?
现在,让我们再次改动GreetPeople()方法,如下所示:
public void GreetPeople(string name, GreetingDelegate MakeGreeting){ MakeGreeting(name);}
如你所见,委托GreetingDelegate出现的位置与 string相同,string是一个类型,那么GreetingDelegate应该也是一个类型,或者叫类(Class)。但是委托的声明方式和类却完全不同,这是怎么一回事?实际上,委托在编译的时候确实会编译成类。因为Delegate是一个类,所以在任何可以声明类的地方都可以声明委托。更多的内容将在下面讲述,现在,请看看这个范例的完整代码: using System;using System.Collections.Generic;using System.Text;
namespace Delegate { //定义委托,它定义了可以代表的方法的类型 public delegate void GreetingDelegate(string name);
class Program {
private static void EnglishGreeting(string name){ Console.WriteLine(“Morning, ” + name);}
private static void ChineseGreeting(string name){ Console.WriteLine(“早上好, ” + name);}
//注意此方法,它接受一个GreetingDelegate类型的方法作为参数
private static void GreetPeople(string name, GreetingDelegate MakeGreeting){ MakeGreeting(name);}
static void Main(string[] args){ GreetPeople(“Jimmy Zhang”, EnglishGreeting);GreetPeople(“张子阳”, ChineseGreeting);Console.ReadKey();} } }
输出如下:
Morning, Jimmy Zhang 早上好, 张子阳
我们现在对委托做一个总结:
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。将方法绑定到委托
看到这里,是不是有那么点如梦初醒的感觉?于是,你是不是在想:在上面的例子中,我不一定要直接在GreetPeople()方法中给 name参数赋值,我可以像这样使用变量:
static void Main(string[] args){ string name1, name2;name1 = “Jimmy Zhang”;name2 = “张子阳”;
GreetPeople(name1, EnglishGreeting);GreetPeople(name2, ChineseGreeting);Console.ReadKey();}
而既然委托GreetingDelegate 和 类型 string 的地位一样,都是定义了一种参数类型,那么,我是不是也可以这么使用委托?
static void Main(string[] args){ GreetingDelegate delegate1, delegate2;delegate1 = EnglishGreeting;delegate2 = ChineseGreeting;
GreetPeople(“Jimmy Zhang”, delegate1);GreetPeople(“张子阳”, delegate2);Console.ReadKey();}
如你所料,这样是没有问题的,程序一如预料的那样输出。这里,我想说的是委托不同于string的一个特性:可以将多个方法赋给同一个委托,或者叫将多个方法绑定到同一个委托,当调用这个委托的时候,将依次调用其所绑定的方法。在这个例子中,语法如下:
static void Main(string[] args){ GreetingDelegate delegate1;delegate1 = EnglishGreeting;// 先给委托类型的变量赋值
delegate1 += ChineseGreeting;// 给此委托变量再绑定一个方法
// 将先后调用 EnglishGreeting 与 ChineseGreeting 方法 GreetPeople(“Jimmy Zhang”, delegate1);Console.ReadKey();}
输出为:
Morning, Jimmy Zhang 早上好, Jimmy Zhang
实际上,我们可以也可以绕过GreetPeople方法,通过委托来直接调用EnglishGreeting和ChineseGreeting:
static void Main(string[] args){ GreetingDelegate delegate1;delegate1 = EnglishGreeting;// 先给委托类型的变量赋值
delegate1 += ChineseGreeting;// 给此委托变量再绑定一个方法
// 将先后调用 EnglishGreeting 与 ChineseGreeting 方法 delegate1(“Jimmy Zhang”);Console.ReadKey();}
NOTE:这在本例中是没有问题的,但回头看下上面GreetPeople()的定义,在它之中可以做一些对于EnglshihGreeting和ChineseGreeting来说都需要进行的工作,为了简便我做了省略。
注意这里,第一次用的“=”,是赋值的语法;第二次,用的是“+=”,是绑定的语法。如果第一次就使用“+=”,将出现“使用了未赋值的局部变量”的编译错误。
我们也可以使用下面的代码来这样简化这一过程:
GreetingDelegate delegate1 = new GreetingDelegate(EnglishGreeting);delegate1 += ChineseGreeting;// 给此委托变量再绑定一个方法
看到这里,应该注意到,这段代码第一条语句与实例化一个类是何其的相似,你不禁想到:上面第一次绑定委托时不可以使用“+=”的编译错误,或许可以用这样的方法来避免:
GreetingDelegate delegate1 = new GreetingDelegate();delegate1 += EnglishGreeting;// 这次用的是 “+=”,绑定语法。delegate1 += ChineseGreeting;// 给此委托变量再绑定一个方法
但实际上,这样会出现编译错误: “GreetingDelegate”方法没有采用“0”个参数的重载。尽管这样的结果让我们觉得有点沮丧,但是编译的提示:“没有0个参数的重载”再次让我们联想到了类的构造函数。我知道你一定按捺不住想探个究竟,但再此之前,我们需要先把基础知识和应用介绍完。
既然给委托可以绑定一个方法,那么也应该有办法取消对方法的绑定,很容易想到,这个语法是“-=”:
static void Main(string[] args){ GreetingDelegate delegate1 = new GreetingDelegate(EnglishGreeting);delegate1 += ChineseGreeting;// 给此委托变量再绑定一个方法
// 将先后调用 EnglishGreeting 与 ChineseGreeting 方法 GreetPeople(“Jimmy Zhang”, delegate1);Console.WriteLine();
delegate1-= EnglishGreeting;//取消对EnglishGreeting方法的绑定 // 将仅调用 ChineseGreeting GreetPeople(“张子阳”, delegate1);Console.ReadKey();} 输出为:
Morning, Jimmy Zhang 早上好, Jimmy Zhang
早上好, 张子阳
让我们再次对委托作个总结:
使用委托可以将多个方法绑定到同一个委托变量,当调用此变量时(这里用“调用”这个词,是因为此变量代表一个方法),可以依次调用所有绑定的方法。
事件的由来
我们继续思考上面的程序:上面的三个方法都定义在Programe类中,这样做是为了理解的方便,实际应用中,通常都是 GreetPeople 在一个类中,ChineseGreeting和 EnglishGreeting 在另外的类中。现在你已经对委托有了初步了解,是时候对上面的例子做个改进了。假设我们将GreetingPeople()放在一个叫GreetingManager的类中,那么新程序应该是这个样子的:
namespace Delegate { //定义委托,它定义了可以代表的方法的类型 public delegate void GreetingDelegate(string name);
//新建的GreetingManager类 public class GreetingManager{ public void GreetPeople(string name, GreetingDelegate MakeGreeting){ MakeGreeting(name);} }
class Program { private static void EnglishGreeting(string name){ Console.WriteLine(“Morning, ” + name);}
private static void ChineseGreeting(string name){ Console.WriteLine(“早上好, ” + name);}
static void Main(string[] args){ //......} } }
这个时候,如果要实现前面演示的输出效果,Main方法我想应该是这样的:
static void Main(string[] args){ GreetingManager gm = new GreetingManager();gm.GreetPeople(“Jimmy Zhang”, EnglishGreeting);gm.GreetPeople(“张子阳”, ChineseGreeting);}
我们运行这段代码,嗯,没有任何问题。程序一如预料地那样输出了: Morning, Jimmy Zhang 早上好, 张子阳
现在,假设我们需要使用上一节学到的知识,将多个方法绑定到同一个委托变量,该如何做呢?让我们再次改写代码:
static void Main(string[] args){ GreetingManager gm = new GreetingManager();GreetingDelegate delegate1;delegate1 = EnglishGreeting;delegate1 += ChineseGreeting;gm.GreetPeople(“Jimmy Zhang”, delegate1);} 输出:
Morning, Jimmy Zhang 早上好, Jimmy Zhang
到了这里,我们不禁想到:面向对象设计,讲究的是对象的封装,既然可以声明委托类型的变量(在上例中是delegate1),我们何不将这个变量封装到 GreetManager类中?在这个类的客户端中使用不是更方便么?于是,我们改写GreetManager类,像这样:
public class GreetingManager{ //在GreetingManager类的内部声明delegate1变量 public GreetingDelegate delegate1;
public void GreetPeople(string name, GreetingDelegate MakeGreeting){ MakeGreeting(name);} }
现在,我们可以这样使用这个委托变量:
static void Main(string[] args){ GreetingManager gm = new GreetingManager();gm.delegate1 = EnglishGreeting;gm.delegate1 += ChineseGreeting;
gm.GreetPeople(“Jimmy Zhang”, gm.delegate1);}
尽管这样达到了我们要的效果,但是似乎并不美气,光是第一个方法注册用“=”,第二个用“+=”就让人觉得别扭。此时,轮到Event出场了,C# 中可以使用事件来专门完成这项工作,我们改写GreetingManager类,它变成了这个样子:
public class GreetingManager{ //这一次我们在这里声明一个事件
public event GreetingDelegate MakeGreet;
public void GreetPeople(string name, GreetingDelegate MakeGreeting){ MakeGreeting(name);} }
很容易注意到:MakeGreet 事件的声明与之前委托变量delegate1的声明唯一的区别是多了一个event关键字。看到这里,你差不多明白到:事件其实没什么不好理解的,声明一个事件不过类似于声明一个委托类型的变量而已。
我们想当然地改写Main方法: static void Main(string[] args){ GreetingManager gm = new GreetingManager();gm.MakeGreet = EnglishGreeting;// 编译错误1 gm.MakeGreet += ChineseGreeting;
gm.GreetPeople(“Jimmy Zhang”, gm.MakeGreet);//编译错误2 }
这次,你会得到编译错误:事件“Delegate.GreetingManager.MakeGreet”只能出现在 += 或-= 的左边(从类型“Delegate.GreetingManager”中使用时除外)。
事件和委托的编译代码
这时候,我们不得不注释掉编译错误的行,然后重新进行编译,再借助Reflactor来对 event的声明语句做一探究,看看为什么会发生这样的错误:
public event GreetingDelegate MakeGreet;
可以看到,实际上尽管我们在GreetingManager里将 MakeGreet 声明为public,但是,实际上MakeGreet会被编译成 私有字段,难怪会发生上面的编译错误了,因为它根本就不允许在GreetingManager类的外面以赋值的方式访问。
我们进一步看下MakeGreet所产生的代码:
private GreetingDelegate MakeGreet;//对事件的声明 实际是 声明一个私有的委托变量
[MethodImpl(MethodImplOptions.Synchronized)] public void add_MakeGreet(GreetingDelegate value){ this.MakeGreet =(GreetingDelegate)Delegate.Combine(this.MakeGreet, value);}
[MethodImpl(MethodImplOptions.Synchronized)] public void remove_MakeGreet(GreetingDelegate value){ this.MakeGreet =(GreetingDelegate)Delegate.Remove(this.MakeGreet, value);}
现在已经很明确了:MakeGreet 事件确实是一个GreetingDelegate类型的委托,只不过不管是不是声明为public,它总是被声明为private。另外,它还有两个方法,分别是add_MakeGreet和remove_MakeGreet,这两个方法分别用于注册委托类型的方法和取消注册,实际上也就是: “+= ”对应 add_MakeGreet,“-=”对应remove_MakeGreet。而这两个方法的访问限制取决于声明事件时的访问限制符。
在add_MakeGreet()方法内部,实际上调用了System.Delegate的Combine()静态方法,这个方法用于将当前的变量添加到委托链表中。我们前面提到过两次,说委托实际上是一个类,在我们定义委托的时候:
public delegate void GreetingDelegate(string name);
当编译器遇到这段代码的时候,会生成下面这样一个完整的类: public class GreetingDelegate:System.MulticastDelegate{
public GreetingDelegate(object @object, IntPtr method);public virtual IAsyncResult BeginInvoke(string name, AsyncCallback callback, object @object);public virtual void EndInvoke(IAsyncResult result);public virtual void Invoke(string name);}
关于这个类的更深入内容,可以参阅《CLR Via C#》等相关书籍,这里就不再讨论了。委托、事件与Observer设计模式
范例说明
上面的例子已不足以再进行下面的讲解了,我们来看一个新的范例,因为之前已经介绍了很多的内容,所以本节的进度会稍微快一些:
假设我们有个高档的热水器,我们给它通上电,当水温超过95度的时候:
1、扬声器会开始发出语音,告诉你水的温度;
2、液晶屏也会改变水温的显示,来提示水已经快烧开了。
现在我们需要写个程序来模拟这个烧水的过程,我们将定义一个类来代表热水器,我们管它叫:Heater,它有代表水温的字段,叫做temperature;当然,还有必不可少的给水加热方法BoilWater(),一个发出语音警报的方法MakeAlert(),一个显示水温的方法,ShowMsg()。
namespace Delegate { class Heater { private int temperature;// 水温
// 烧水
public void BoilWater(){ for(int i = 0;i <= 100;i++){ temperature = i;
if(temperature > 95){ MakeAlert(temperature);ShowMsg(temperature);} } }
// 发出语音警报
private void MakeAlert(int param){ Console.WriteLine(“Alarm:嘀嘀嘀,水已经 {0} 度了:” , param);}
// 显示水温
private void ShowMsg(int param){ Console.WriteLine(“Display:水快开了,当前温度:{0}度。” , param);} }
class Program { static void Main(){ Heater ht = new Heater();ht.BoilWater();} } }
Observer设计模式简介
上面的例子显然能完成我们之前描述的工作,但是却并不够好。现在假设热水器由三部分组成:热水器、警报器、显示器,它们来自于不同厂商并进行了组装。那么,应该是热水器仅仅负责烧水,它不能发出警报也不能显示水温;在水烧开时由警报器发出警报、显示器显示提示和水温。
这时候,上面的例子就应该变成这个样子: // 热水器
public class Heater { private int temperature;
// 烧水
private void BoilWater(){ for(int i = 0;i <= 100;i++){ temperature = i;} } }
// 警报器
public class Alarm{ private void MakeAlert(int param){ Console.WriteLine(“Alarm:嘀嘀嘀,水已经 {0} 度了:” , param);} }
// 显示器
public class Display{ private void ShowMsg(int param){ Console.WriteLine(“Display:水已烧开,当前温度:{0}度。” , param);} }
这里就出现了一个问题:如何在水烧开的时候通知报警器和显示器?在继续进行之前,我们先了解一下Observer设计模式,Observer设计模式中主要包括如下两类对象:
Subject:监视对象,它往往包含着其他对象所感兴趣的内容。在本范例中,热水器就是一个监视对象,它包含的其他对象所感兴趣的内容,就是temprature字段,当这个字段的值快到100时,会不断把数据发给监视它的对象。
Observer:监视者,它监视Subject,当Subject中的某件事发生的时候,会告知Observer,而Observer则会采取相应的行动。在本范例中,Observer有警报器和显示器,它们采取的行动分别是发出警报和显示水温。
在本例中,事情发生的顺序应该是这样的:
1.警报器和显示器告诉热水器,它对它的温度比较感兴趣(注册)。2.热水器知道后保留对警报器和显示器的引用。
3.热水器进行烧水这一动作,当水温超过95度时,通过对警报器和显示器的引用,自动调用警报器的MakeAlert()方法、显示器的ShowMsg()方法。
类似这样的例子是很多的,GOF对它进行了抽象,称为Observer设计模式:Observer设计模式是为了定义对象间的一种一对多的依赖关系,以便于当一个对象的状态改变时,其他依赖于它的对象会被自动告知并更新。Observer模式是一种松耦合的设计模式。实现范例的Observer设计模式
我们之前已经对委托和事件介绍很多了,现在写代码应该很容易了,现在在这里直接给出代码,并在注释中加以说明。
using System;using System.Collections.Generic;using System.Text;
namespace Delegate { // 热水器
public class Heater { private int temperature;public delegate void BoilHandler(int param);//声明委托 public event BoilHandler BoilEvent;//声明事件
// 烧水
public void BoilWater(){ for(int i = 0;i <= 100;i++){ temperature = i;
if(temperature > 95){ if(BoilEvent!= null){ //如果有对象注册
BoilEvent(temperature);//调用所有注册对象的方法 } } } } }
// 警报器
public class Alarm { public void MakeAlert(int param){ Console.WriteLine(“Alarm:嘀嘀嘀,水已经 {0} 度了:”, param);} }
// 显示器
public class Display { public static void ShowMsg(int param){ //静态方法
Console.WriteLine(“Display:水快烧开了,当前温度:{0}度。”, param);} }
class Program { static void Main(){ Heater heater = new Heater();Alarm alarm = new Alarm();
heater.BoilEvent += alarm.MakeAlert;//注册方法
heater.BoilEvent +=(new Alarm()).MakeAlert;//给匿名对象注册方法 heater.BoilEvent += Display.ShowMsg;//注册静态方法
heater.BoilWater();//烧水,会自动调用注册过对象的方法 } } }
输出为:
Alarm:嘀嘀嘀,水已经 96 度了: Alarm:嘀嘀嘀,水已经 96 度了: Display:水快烧开了,当前温度:96度。// 省略....Net Framework中的委托与事件
尽管上面的范例很好地完成了我们想要完成的工作,但是我们不仅疑惑:为什么.Net Framework 中的事件模型和上面的不同?为什么有很多的EventArgs参数?
在回答上面的问题之前,我们先搞懂.Net Framework的编码规范:
1.委托类型的名称都应该以EventHandler结束。
2.委托的原型定义:有一个void返回值,并接受两个输入参数:一个Object 类型,一个 EventArgs类型(或继承自EventArgs)。
3.事件的命名为 委托去掉 EventHandler之后剩余的部分。4.继承自EventArgs的类型应该以EventArgs结尾。
再做一下说明:
1.委托声明原型中的Object类型的参数代表了Subject,也就是监视对象,在本例中是 Heater(热水器)。回调函数(比如Alarm的MakeAlert)可以通过它访问触发事件的对象(Heater)。
2.EventArgs 对象包含了Observer所感兴趣的数据,在本例中是temperature。
上面这些其实不仅仅是为了编码规范而已,这样也使得程序有更大的灵活性。比如说,如果我们不光想获得热水器的温度,还想在Observer端(警报器或者显示器)方法中获得它的生产日期、型号、价格,那么委托和方法的声明都会变得很麻烦,而如果我们将热水器的引用传给警报器的方法,就可以在方法中直接访问热水器了。
现在我们改写之前的范例,让它符合.Net Framework 的规范: using System;using System.Collections.Generic;using System.Text;
namespace Delegate { // 热水器
public class Heater { private int temperature;public string type = “RealFire 001”;// 添加型号作为演示 public string area = “China Xian”;// 添加产地作为演示
//声明委托
public delegate void BoiledEventHandler(Object sender, BoliedEventArgs e);public event BoiledEventHandler Boiled;//声明事件
// 定义BoliedEventArgs类,传递给Observer所感兴趣的信息 public class BoliedEventArgs : EventArgs { public readonly int temperature;public BoliedEventArgs(int temperature){ this.temperature = temperature;} }
// 可以供继承自 Heater 的类重写,以便继承类拒绝其他对象对它的监视 protected virtual void OnBolied(BoliedEventArgs e){ if(Boiled!= null){ // 如果有对象注册
Boiled(this, e);// 调用所有注册对象的方法 } }
// 烧水。
public void BoilWater(){ for(int i = 0;i <= 100;i++){ temperature = i;if(temperature > 95){ //建立BoliedEventArgs 对象。
BoliedEventArgs e = new BoliedEventArgs(temperature);OnBolied(e);// 调用 OnBolied方法 } } } }
// 警报器
public class Alarm { public void MakeAlert(Object sender, Heater.BoliedEventArgs e){ Heater heater =(Heater)sender;//这里是不是很熟悉呢? //访问 sender 中的公共字段
Console.WriteLine(“Alarm:{0}{1}: ”, heater.area, heater.type);Console.WriteLine(“Display:水快烧开了,当前温度:{0}度。”, e.temperature);Console.WriteLine();} }
class Program { static void Main(){ Heater heater = new Heater();Alarm alarm = new Alarm();
heater.Boiled += alarm.MakeAlert;//注册方法
heater.Boiled +=(new Alarm()).MakeAlert;//给匿名对象注册方法
heater.Boiled += new Heater.BoiledEventHandler(alarm.MakeAlert);//也可以这么注册 heater.Boiled += Display.ShowMsg;//注册静态方法
heater.BoilWater();//烧水,会自动调用注册过对象的方法 } } }
输出为:
Alarm:China XianRealFire 001: Alarm: 嘀嘀嘀,水已经 96 度了: Alarm:China XianRealFire 001: Display:水快烧开了,当前温度:96度。// 省略...总结
在本文中我首先通过一个GreetingPeople的小程序向大家介绍了委托的概念、委托用来做什么,随后又引出了事件,接着对委托与事件所产生的中间代码做了粗略的讲述。
在第二个稍微复杂点的热水器的范例中,我向大家简要介绍了 Observer设计模式,并通过实现这个范例完成了该模式,随后讲述了.Net Framework中委托、事件的实现方式。
本文的源码可以在http://www.tracefact.net/sourcecode/delegates-and-events.rar 下载。
第二篇:物业委托管理与自有管理模式的区别
委托物业管理与自建自管的优劣分析
委托物业管理是指发展商在房产项目的开发过程中,由发展商(或国有资产)通过招投标或协议招标的形式,先行选定专业物业管理公司,对该物业进行前期管理(包括顾问公司)。如:戴德梁行、仲量联行、大正物业等专业物业管理公司。世邦魏理仕管理康田企业园、渝高物业管理留学生创业园、渝海物业管理的重庆机场、大正物业管理的政府物业等。
自建自管是指发展商在房产项目的开发过程中,由发展商自己建立的物业管理公司对其物业项目进行管理。开发商为了项目的持续式发展,在一段时期内,只能自建物管公司自行管理,以补贴式物业管理,向购房者提供售后服务。如龙湖地产下属新龙湖物业管理有限公司、金科地产下属金科物业管理有限公司、曙光都市工业园下属重庆宏景源物业管理有限公司等。
一、委托管理的优势
如果选聘社会上有实力、有经验、品牌的专业管理服务公司(如五大行),既能树立企业良好形象,又能使业主们一开始就享受到高水平的管理服务,带动后期房屋销售。主要优势有以下几个方面:
1,可以减少开发企业的管理难度; 2,人员经过专业系统培训,素质较高; 3,服务理念与意识相对较强;
4,前期介入可站在业主角度提出对发展商合理且促进销售的专
/ 10
业建议;
5,对企业及物业品牌形象能起到提升作用; 6,对消费者购买具有促进作用;
7,树立良好业主口碑,促进后期销售工作;
二、委托管理的劣势
开发企业通过委托的形式实施专业化管理,通过专业化、集约式经营希望提高服务水平降低管理成本,在一定程度上满足开发企业及消费者的需求,但在实际运作中也出现了很多的问题:
1、外包服务质量难以控制
一般委托管理都是通过招标方式进行,一旦决定了合作方,实际质量是难以控制的,加之现有专业化物业公司的管理水平良莠不齐,人员素质不等。开发企业通常只能控制对方的管理者或代表,基层员工是较难控制的,质量在第一现场难以控制。最为关键的是这些专业化公司的员工并不一定接受过专业化的培训,导致专业化的服务停留在较低水平,而达不到企业原来的期望。即使把服务要求写在合同上,要求专业公司按合同来进行,这种做法容易使专业公司把合同条款当作最终的工作目标,而不能与企业的以客户为导向的服务宗旨一致。
2、委托管理往往较难体现公司的形象及文化
3、管理成本较高
开发企业应支付物业公司以下几种费用:(1)前期开办费:4-5元/m2,按建筑面积计算;
(2)空置费:从首套房屋约定交房时间起,未销售房屋(未到接
/ 10
房期限)按50%计收物业管理费;
(3)专有部分物管费:属开发企业自有产权(如车库);(4)销售中心物管费:按建筑面积计算,价格在20-30元/m2;(5)水电能耗费:开发企业自有资产产生的水电费用及公摊;(6)物业费补贴:按重庆物价局778号文相关规定,在开发项目基础设施没完善的情况下,物业费应作30%的下调。这部分费用物业公司将向开发企业收取。
4、物业服务费用较高
高端物业管理公司有着较完善的服务体系,服务标准较高。写字楼物业服务费在5-10元/m2,大多数购房者接受起来有一定的难度,对后期销售有一定的影响。
5、在经营模式上难与开发企业达成一致
所有专业化物业公司经营均是以最大的经济效益为目的,其在物业管理过程中,从人员的配置,物品材料的使用上都会考虑成本因素。以次充好,以少充多,降低服务标准,不能满足开发企业的要求。
三、自建自管的优势(1)管理成本较低
开发企业组建自有物业公司可减少开办费、空置房管理费、专有部分管理费、销售中心物业费、物业费补贴等多种费用,可以节约较大成本。
(2)在经营管理思路上能够与开发企业达成一致
物业公司是开发企业的下属企业,能够较大程度的满足开发企业
/ 10 的要求,在经营理念及经营方式上能够与开发企业保持一致。
(3)服务意识较强
物业公司作为开发下属企业,员工从入职开始接受公司的发展理念、企业文化。能够与开发企业始终保持一致,全心全意的为开发企业服务。
(4)对客户负责的表现
减少管理环节,能够及时有效的解决开发企业相关遗留问题,树立企业良好口碑。
(5)创造效益
物业公司的主要收入包括:公共性服务费(物管费)、专项服务费、特约服务费、多种经营收入(广告)、杂费等。一般情况下,物业管理公司的物业费利润在7-10%。
四、自建自管物业的劣势(1)管理难度较大
物业企业成立之初,管理体系尚不完善。在人员配备、物资配备、操作流程的熟悉、员工的配合等方面可能会出现不同程度的问题,增加企业管理难度。
(2)管理事项复杂
物业公司作为一个具有独立法人资格的企业,需要建立健全各个职能部门及完善的管理体系,管理事项复杂。(3)管理服务经验不足,盲从性较大。(4)有一定的管理风险
/ 10
物业公司在物业服务过程中主要有安全风险(灾害、偷盗)、资金风险(恶意欠费)、停车场责任风险、设备风险(电梯、供配电设施)。
通过两种管理模式的比较,从产品定位、经济效益、后期发展等方面考虑,自建自管方式较为适合本项目。
附:物业公司组建相关流程
物业公司组建流程
一、成立物业服务公司
工商注册登记
公司设立登记申请书.doc
企业(字号)名称预先核准申请书.doc
内资有限责任公司设立登记应提交材料:
1、公司法定代表人签署的《公司设立登记申请书》;
2、全体股东签署的《指定代表或者共同委托代理人的证明》及指定代表或委托代理人的身份证件复印件;
应标明指定代表或者共同委托代理人的办理事项、权限、授权期限。
3、全体股东签署的公司章程;
4、股东的主体资格证明或者自然人身份证件复印件; 股东为企业的,提交营业执照副本复印件;股东为事业法人的,5 / 10
提交事业法人登记证书复印件;股东为社团法人的,提交社团法人登记证复印件;股东为民办非企业单位的,提交民办非企业单位证书复印件;股东为自然人的,提交身份证件复印件;其他股东提交有关法律法规规定的资格证明。
5、依法设立的验资机构出具的验资证明;
6、股东首次出资是非货币财产的,提交已办理财产权转移手续的证明文件;
7、董事、监事和经理的任职文件及身份证件复印件;
依据《公司法》和公司章程的有关规定,提交股东会决议、董事会决议或其他相关材料。股东会决议由股东签署,董事会决议由董事签字。
8、法定代表人任职文件及身份证件复印件;
根据《公司法》和公司章程的有关规定,提交股东会决议、董事会决议或其他相关材料。股东会决议由股东签署,董事会决议由董事签字。
9、住所使用证明;
自有房产提交房屋产权证复印件;租赁房屋提交租赁协议复印件以及出租方的房屋产权证复印件。有关房屋未取得房屋产权证的,属城镇房屋的,提交房地产管理部门的证明或者竣工验收证明、购房合同及房屋销售许可证复印件;属非城镇房屋的,提交当地政府规定的相关证明。出租方为宾馆、饭店的,提交宾馆、饭店的营业执照复印件。使用军队房产作为住所的,提交《军队房地产租赁许可证》复印
/ 10
件。
将住宅改变为经营性用房的,属城镇房屋的,还应提交《登记附表-住所(经营场所)登记表》及所在地居民委员会(或业主委员会)出具的有利害关系的业主同意将住宅改变为经营性用房的证明文件;属非城镇房屋的,提交当地政府规定的相关证明。
10、《企业名称预先核准通知书》;
11、法律、行政法规和国务院决定规定设立有限责任公司必须报经批准的,提交有关的批准文件或者许可证书复印件;
12、公司申请登记的经营范围中有法律、行政法规和国务院决定规定必须在登记前报经批准的项目,提交有关的批准文件或者许可证书复印件或许可证明。
注:
1、依照《公司法》、《公司登记管理条例》设立的除一人有限责任公司和国有独资公司以外的有限责任公司申请设立登记适用本指南。
2、提交的申请书与其它申请材料应当使用A4型纸。
以上各项未注明提交复印件的,应当提交原件;提交复印件的,应当注明“与原件一致”并由股东签署,或者由其指定的代表或委托的代理人加盖公章或签字。
3、以上涉及股东签署的,自然人股东由本人签字;自然人以外的股东加盖公章。
二、税务申报
三、物业企业资质申报
/ 10
1、物业服务企业资质等级申请表 原件3份
物业企业资质申报表.doc
2、营业执照 复印件3份
3、公司章程 原件3份
物业公司章程范本.doc
4、企业法定代表人的身份证明 复印件3份
5、注册资本验资证明文件 复印件3份
6、物业管理专业人员的职业资格证书 复印件3份
7、管理和技术人员职称证书(需验证原件)复印件3份
8、物业管理专业人员、管理和技术人员的劳动合同(市或区两级劳动社会保障局印制的规范性合同)复印件3份 受理条件:
(1)是否具有独立法人资格;
(2)注册资本人民币是否在人民币50万元以上;
(3)物业管理专业人员以及工程、管理、经济等相关专业类的专职管理和技术人员是否不少于10人,其中,具体中级以上职称的人员是否不少于5人,工程、财务等业务负责人是否具有相应专业中级以上职称;
(4)物业管理专业人员是否按照国家有关规定取得了职业资格证书;
/ 10
(5)是否有委托的物业管理项目;
(6)是否建立并严格执行服务质量、服务收费等企业管理制度和标准,是否建立企业信用档案系统;(7)是否具备规定的其他行政许可条件。
其中,新设立的物业服务企业不需审查第(5)、(6)项内容。
四、前期物业合同备案
开发建设单位与选聘的物业服务企业应当自前期物业服务合同订立之日起15日内(预售许可证办理前)向物业所在地区、县(自治县)房地产行政主管部门申请备案,并提交下列材料:
(一)物业管理企业营业执照和资质证书;
(二)《建设工程规划许可证》和经规划部门批准、标注物业管理服务用房具体位置和面积的规划详图。
(三)签订的《前期物业服务合同》;
(四)物业管理服务方案;
(五)《业主临时公约》
(六)住宅项目建筑规模在2万平方米以上的提供重庆市物业管理招投标《中标通知书》或《议标结果通知书》;建筑规模小于2万平方米的提供区、县物业办出具的物业协议招标备案证明;
(七)普通住宅小区提供物业管理服务费收费等级和中标价格标准。以上第1、2、7、项要件需核对原件后留存复印件,经核对内容无误后,在留存的复印件空白处加盖专用章。
五、物业管理用房备案
/ 10
江北区社区用房和居民活动场所协议书.x
物业管理用房申报确认表.xls
六、物业服务费申报
1.物业服务收费申请 页
2.重庆市物业服务收费申报表
3.物业服务收费测算资料 4.前期物业服务委托合同 5.业主公约 6.物管企业营业执照(复印件)7.物管企业资质证书(复印件)8.商品房预售许可证 9.绿化单项验收资料 10.申报硬件图片资料 / 10
物业服务费申报表.页 doc物业服务成本测算.页
doc页 页 页 页 页 页
第三篇:信托、委托、信托贷款、委托贷款区别
信托、委托、信托贷款、委托贷款的区别
一.信托与委托的区别
1.信托的当事人是多方的,从法律上讲,至少有委托人、受托人、受益人三方,有时受益人还不止一个。而委托代理的当事人,仅有委托人(或被代理人)和受托人(或代理人)双方。
2.产,委托者与受托者就签不成合同,但是委托合同并不一定要有财产,在没有财产的情况下也可以成立,如委托别人去购买房子,或者委托别人代替自己签定买卖合同,这就与信托不一样。
3.财产的占有权变化不同。信托时财产占有权转移到了受托者手中,由受托人
代为管理和处理。而委托、代理的财产占有权始终由委托人或被代理人掌握,并不发生占有权的转移。如委托别人出售房子,受托者得到的只是出售权,而不是房子的占有权。
4.要出售房子,先把房子信托给受托人,从这时起,委托者对房子便没有占有权了,能够把房子卖掉的,只是取得了占有权的受托者。而代理时,虽然把代理权交给了代理人,被代理人本人仍然拥有对财产的管理和处理权。
二.信托与委托的区别
5.至于委托和代理相比,一般而言,委托中受托者比代理人的权限大。比如出
售房子,委托时,委托人给了受托者卖掉房子的权限后,至于如何出售,多少价钱,可以由受托者决定。但代理时,代理人只能根据委托人的具体交代去执行。
三.信托贷款和委托贷款
6.信托贷款是指信托机构在国家规定的范围内,运用信托存款等自有资金,对自行审定的单位和项目发放的贷款。
7.以贷款的用途分,可划分为固定资产信托贷款、流动资金信托贷款和临时周转信托贷款;
根据项目选定主体的不同以及委托人的不同标准和要求,将贷款分为甲类信托贷款和乙类信托贷款。所谓甲类信托贷款,就是由委托人指定贷款项目,项目风险由委托人负责;乙类贷款则是由受托人选定项目,风险相应由受托人承担。
8.信托贷款与委托贷款的区别
委托贷款的对象和用途由委托人指定,而信托贷款的对象和用途由信托机构自行选定;国家对委托贷款的管理较松,而对信托贷款的管理则与银行贷款一样偏严。和银行贷款相比,信托贷款的利率有一定的浮动幅度,因此,信托机构可以在国家政策允许的条件下,对一些企业特殊而合理的资金需要给予支持。
第四篇:国内外高速公路事件管理的区别
国内外高速公路事件管理的区别
作者:孙明哲
班级:交通一班 学号:090402011040 学院专业:机械与车辆学院交通工程专业
二0一一年十一月
国内外高速公路事件管理的区别
随着我国高速公路的不断建设,机动车保有量的持续增加,交通事故呈上升趋势,开展高速公路的安全管理研究也日益重要。笔者从国内外高速公路事件管理入手对高速公路行车安全、应急事件管理等进行探索研究,重点讨论了国内外高速公路行车的特点、交通事故的特点以及影响交通安全的因素,如人、车、路、管理、恶劣天气、交通设施等因素,并针对这些因素,分析国外高速公路事件管理经验,借鉴国外先进措施,对我国高速公路事件管理提出一些建议。
第一部分:我国高速公路现状
一、高速公路的含义及特点
高速公路,是指经国家公路主管部门验收认定,符合高速公路工程技术标准,并设置完善的交通安全设施、管理设施和服务设施,专供机动车高速行驶的公路。
高速公路的特点是具有机动车专用、分离行驶、全部立交、控制出入以及高标准、设施完善等功能。与一般公路相比,高速公路具有车速高、通行能力大、运输费用省、行车安全等四大优点,其中车速高是其最显著的优点,也是高速公路同其他公路的根本区别。
二、我国高速公路的类型
公路按使用性质可分为:国家公路、省公路、县公路和乡公路(简称为国、省、乡道),以及专用公路五个行政等级。一般把国道和省道称为干线,县道和乡道称为支线。国道是指具有全国性政治、经济意义的主要干线公路,包括重要的国际公路,国防公路、连接首都与各省、自治区、直辖市首府的公路,连接各大经济中心、港站枢纽、商品生产基地和战略要地的公路。省道是指具有全省(自治区、直辖市)公路主管部门负责修建、养护和管理。国道中跨省的高速公路由交通部批准的专门机构负责修建、养护和管理。县道是指具有全县(县级市)政治、经济意义,连接县城和县内主要乡(镇)、主要商品生产和集散地的公路,以及不属于国道、省道的县际间公路。县道由县、市公路主管部门负责修建、养护和管理。乡道是指主要为乡(镇)村经济、文化、行政服务的公路,以及不属于县道以上公路的乡与乡之间及乡与外部联络的公路。乡道由人民政府负责修建、养护和管理。专用公路是指专供或主要供厂矿、林区、农场、油田、旅游区、军事要地等与外部联系的公路。专用公路由专用单位负责修建、养护和管理。也可委托当地公路部门修建、养护和管理。
国内外高速公路事件管理的区别
三、高速公路交通安全
(一)、我国道路交通安全现状
2010年,全国共接报道路交通事故3906164起,同比上升35.9%。其中,涉及人员伤亡的道路交通事故219521起,造成65225人死亡、254075人受伤,直接财产损失9.3亿。与去年相比,事故起数减少18839起,下降7.9%;死亡人数减少2534人,下降3.7%;受伤人数减少21050人,下降7.7%;直接财产损失增加1196.7万元,上升1.3%。发生一次死亡3人以上道路交通事故1244起,同比减少32起,发生一次死亡5人以上道路交通事故269起,同比增加8起;发生一次死亡10人以上特大道路交通事故34起,同比增加10起。适用简易程序处理的道路交通事故3686652起,与去年相比,增加1050895起,上升39.9%。
以上数据表明,我国万车死亡率呈稳定下降趋势,但道路交通安全总体形势依然严峻,每年因道路交通事故造成的人员伤亡和财产损失仍呈逐步上升趋势。
(二)、高速公路行车特点
高速公路具有诸多特殊构造和设施,决定了其行车安全的特殊性。高速公路与其它公路和铁路均采用立体交叉形式衔接,能排除线路上其它通行者带来的交通干扰,汽车能充分发挥其功能,达到持续、均衡地高速行进;汽车仅能通过路口与外界发生联系,故能安全地发挥其功能;往返行车道用中央分隔带隔开,无对面汽车正面冲撞的可能性,而且由于在分隔带上植树并设置遮光栅,可防止夜间行车时汽车前照灯给对面来车驾驶员造成的眩光干扰,保证了行车安全。
高速驾驶对驾驶员的心理影响很大。在人-车-路构成的环境中,汽车一旦驶入高速公路,在到达目的地之前,驾驶员要在高速公路上驾驶很长时间。一般高速驾驶对驾驶员心理产生以下影响:高速下驾驶员不容易全面、正确地感知车内外的变化;空间认知能力减退,即对事物的大小、动与静感知不良;对速度感觉钝化、易疲劳;给注意力转移带来困难,影响信息的摄取和操作;思维判断赶不上情况的变化;反应的及时性和准确性变差。
(三)我国高速公路交通事故的特点
高速公路交通事故具有道路交通事故的基本特征,但它与普通公路上发生的交通事故相比,在事故发生原因、事故形态、发生时段、发生路段、损害后果、伤者救助等方面又呈现出不同的特征。归纳起来,主要有如下几个方面:(1)事故发生的原因方面,表现为超速行驶、不按规定保持行车间距、违章变
国内外高速公路事件管理的区别
更车道以及道路缺陷等四个方面:
1、超速行驶;
2、不按规定保持纵向间距;
3、不按规定变更车道;
4、道路缺陷。
四、高速公路交通事故与管理的因素
高速公路管理,在我国还没有统一的模式,由于“一路两制”即公安部门和交通部门职责不清,使得管理出现问题。此外,管理的硬件设施落后,科学化管理水平低,也是影响高速公路安全的因素。高速公路安全管理部门应对高速公路提供有效的管理,为人民提供安全、舒适、通畅、迅捷的行车环境,从而减少交通事故,保证通行安全。
第二部分:国内外高速公路事件管理现状差别
一、医疗救治跟不上
我国道路交通事故致死率(死亡人数/伤亡总人数)也比较高,约30%左右,而英、美、日等国家只有1%左右。除了我国交通弱者较多之外,一个很重要的原因是条件所限,我国交通事故救护力量还比较薄弱,尚未建立起交通事故急救系统。在日本所有的交通事故中,95%以上都能得到及时有效的急救和治疗,因此其交通事故致死率极低。
二、机动车构成复杂
我国机动车车种构成极其复杂,交通安全性能较差的摩托车、拖拉机及农用车等占机动车总量的近三分之二,而发达国家只占五分之一。加上市场秩序混乱,车辆使用者超速、超载现象十分普遍,这又给车辆安全技术状况带来很大威胁。
三、课题研究不够国外科学
国际上通常把“教育、工程、执法和急救”这四大措施,称之为“4E”科学策略(四个词的英文第一个字母都是“E”)。这一方法是世界上的交通专家们为预防和减少交通事故,经过多年研究与实践而总结出的成果。
四、国家经济的差距
国内外高速公路事件管理的区别
美国、加拿大、英国、德国、日本、韩国等国家从五六十年代起,各自经历了经济高速发展、交通安全状况严重恶化的时期。在最近二三十年间,这些国家通过综合运用“4E”科学策略,完善交通安全法律体系,调整交通安全政策,强化政府的交通安全管理职能,全面提高道路、车辆的安全性,从而使交通安全状况大为改观。
五、教育跟不上
在这其中,加强交通安全教育,提高全民交通素质,显得尤其重要。世界上最先进行交通安全教育的是美国,他们从1920年起就在中小学校中进行了交通安全教育试点工作。此后,交通安全教育在世界各国普遍展开,并取得良好效果。而我国的交通安全教育,通常只是采用交通安全宣传、举办驾驶人员学习班、交通民警到小学讲课等形式,除此之外,主要是依靠车管单位进行经常性教育。
【建立现代交通安全管理机制】
根据国际经验,一个国家应有自己基本的交通安全对策。而交通安全计划与目标的制定,是当前许多国家减少交通事故的具体对策之一。如今,世界主要交通发达国家已相继提出和建立了以预防交通事故、降低事故严重性为核心的交通安全管理机制。
早在20世纪60年代,日本就向全民发布过《第一次交通战争宣言》,发动了全国性交通安全运动。日本全国交通安全对策会议在1970年提出了第一个交通安全五年计划,到20世纪末,日本经过了6个交通五年计划,每个五年计划都有交通安全目标,并取得明显成效。
在日本的带动效应下,许多交通比较发达、事故比较多的国家竞相效仿。诸如瑞典国家交通安全委员会就提出了一个国家级目标:从1985年到2000年交通事故死亡减少25%,到2010年减少40%。经过综合治理,瑞典的交通事故死亡人数已日渐下降,国际上公认瑞典是世界上目前交通安全搞得最好的国家之一。最近瑞典国家交通安全委员会又提出了一个“交通事故死伤为零”、不确定达到时间的远景目标,以此激励人们为交通安全进行不懈努力。
一些交通专家认为,我国可以借鉴国际上的交通安全目标管理计划,以政府为主导,建立起现代交通安全管理机制,可根据当前交通现状,制定一个科学、合理、有望经过努力实现的奋斗目标。不过,在具体操作上要防止完全照搬国外做法,更不能将类似生产中的定额指标式管理应用到交通安全管理中去。
国内外高速公路事件管理的区别
第三部分:分析及建议
一、建立和开发高速公路交通智能监控系统
我国现阶段只是进行了大规模的道路建设,落后的交通管理系统制约了高速公路的使用效果,应研究智能运输系统,将先进的检测、通信、计算机技术综合应用于道路交通运输系统中,使车辆和道路的功能智能化,提高运输效率、保障交通安全、改善行车安全、减少行车污染。
(一)、建立交通流量实时检测系统。
交通流量实时检测系统由前端采集系统、中心信息处理系统和通信系统等部分组成。该系统可将各车道车流量、行车速度等信息,通过CDMA网络及时回传到中心信息处理系统。这样一来管理人员可及时获得被检测道路的车速、流量、道路占有率和车型等信息,从而随时掌握实时路况,对车辆进行科学指挥调度。交管部门还可通过室外显示屏、电视、广播、互联网向公众实时发布路况信息,有效缓解交通拥堵。
(二)、建立和开发高速公路交通监控系统智能交通系统ITS 随着全球经济的高速发展和道路交通的日趋繁忙,因交通事故而导致严重的人员伤亡和财产损失已引起世界各国的广泛关注。近十年来,智能交通运输技术的快速发展给交通事故预防与安全管理带来了广阔的前景。智能交通运输系统是当前国际道路交通和运输科技发展的前沿,是交通运输的发展方向,也是高新技术的最大民用市场之一。从具体功能上讲,ITS系统将汽车、驾驶者、道路以及相关的服务部门相互连接起来,并使道路与汽车的运行功能智能化,从而使公众能够高效地使用公路交通设施和能源。其具体的运作方式是:该系统采集到的各种道路交通及各种服务信息,经过交通管理中心集中处理后,传送到公路交通系统的各个用户,出行者可以进行实时的交通方式和交通路线的选择;交通管理部门可以自动进行交通疏导、控制和事故处理;运输部门可以随时掌握所属车辆的动态情况,进行运力合理调度。这样,路网上的交通经常处于最佳状态,能够改善交通拥挤,最大限度地提高路网的通行能力、机动性及安全性。
80年代后,各国旨在将先进的信息技术、数据通讯技术、电子控制技术及计算机处理技术等有效地综合应用于公路交通管理体系,从而建立起一种大范围、国内外高速公路事件管理的区别
全方位发挥作用的,实时、准确、高效的智能交通系统的概念便产生了。1995年3月美国运输部正式提出了“国家智能交通系统项目规划(National ITS Program Plan)”,明确智能交通系统的7大领域和29个服务用户及服务功能,并确定到2005年的开发计划。其7大领域包括:出行和交通管理系统、出行需求管理系统、公共交通运营系统、商用车辆运营系统、电子收费系统、应急管理系统、先进的车辆控制和安全系统。
二、恶劣气候条件下高速公路交通管理措施
在恶劣天气出现时,无论采取哪一种交通管制方式,其根本目的都是为了保障高速公路的交通安全,预防交通事故的发生。但是,不同的交通管制方式对车辆的管制程度是不同的;全线封闭时,高速公路全线禁止车辆通行;局部封闭时,高速公路部分路段禁止车辆通行;间断通行时,高速公路对车辆实行限量通行;限制车速时,高速公路对车辆实行限速通行。因此,在交通管制的具体实施过程中,应根据不同交通管制方式对车辆的不同管制程度采取科学的方法和步骤。
1、全线封闭。(1)高速公路全线各收费站上道口全部封闭;(2)沿线可变信息板发布全线封闭信息,告知封闭后滞留在高速公路上的车辆限速20公里行驶,就近驶入服务区或驶离高速公路;
2、局部封闭。(1)在封闭路段两端收费站封闭通往封闭路段的匝道口;(2)有关行政区的高速公路公安交通管理部门派出警力,会同高速公路路政部门在封闭路段两端匝道口设置交通标志和隔离设施,实施车辆分流,禁止从未封闭路段驶来的车辆驶入封闭路段;(3)沿线可变信息板发布局部封闭信息,并告知以下内容:滞留在封闭路段的车辆限速20公里行驶,就近驶入服务区或驶离高速公路;其他在高速公路上行驶的车辆应当在封闭路段两端的收费站匝道口驶离高速公路;(4)在未封闭路段收费站逐车发放告知卡,告知驶入高速公路的车辆在高速公路上的通行区间,以及驶离高速公路的具体地点。
3、间断放行。在收费站口根据天气情况和道路状况每隔一定时间间隔放行一部分车辆,间断放行的时间间隔和放行车辆的数量应根据不同的气象条件和道路环境来确定,以合理控制进入高速公路的车辆密度和行车间距,确保行车安全为原则。需要强调的是,在实施间断放行的同时,必须对进入高速公路的车辆采取限速措施,否则就难以保证通行路段合理的车辆密度和车辆之间的行车间距。
国内外高速公路事件管理的区别
4、限制车速。(1)在收费站逐车发放告知卡,告知驶入高速公路的车辆必须按照告知卡上规定的车速行驶,以及限制车速的原因;(2)沿线可变信息板发布限制车速信息,并告知驾驶员限制车速的原因;(3)车速限制的具体规定:能见度小于500米大于200米时,在高速公路上通告的车辆时速不得超过80公里与同一车道行驶的前车必须保持150米以上的行车间距;能见度小于200米大于100米时,时速不得超过60公里,与同一车道行驶的前车必须保持100米以上的行车间距;能见度小于100米大于50米时,时速不得超过40公里,与同一车道行驶的前车必须保持50米以上的行车间距;因雾、雪道路轻度结冰时,时速不得超过20公里,与同一车道行驶的前车必须保持50米以上的行车间距。
应当说明的是,为了做好恶劣天气条件下高速公路的交通事故预防工作,保障高速公路的行车安全,高速公路和公安交通管理部门还应当加强与当地气象部门的联系与合作,每天按时获取未来24小时甚至未来几天的高速公路沿线气象信息预报,以提前调整巡罗方案,及时掌握路面情况,适时采取交通管制措施。
三、建全高速公路救援系统
采取科学的交通管理措施对于预防高速公路交通事故是极为必要的。但由于交通事故发生的随机性和突发性,更多的交通事故又是难以预防的。因此,事故发生后采取及时而有效的紧急救援措施,对于降低事故所造成的(伤亡和经济)损失,预防第二次连锁事故甚为重要。
1、为各种事故调派警察、消防车及救护车;
2、为破坏的道路和损坏的公路设施提供维修设备;
3、为损坏的和不能开动的车辆提供牵引车辆;
4、改变事故地点上游入口匝道的流入交通量;
5、多渠道发布紧急事件信息。
四、加强对驾驶员的管理
应对驾驶员加强教育和管理,提高驾驶员的素质,针对高速公路的行驶特点,对驾驶员进行安全教育,让驾驶员懂得高速公路行驶中的注意事项。对违章的驾驶员进行教育处理,使之从中吸取教训。驾驶员在行驶前应注意制定合理的行车计划,不要疲劳驾驶,不要超速行驶,对车辆要进行必要的检查,应按要求使用
国内外高速公路事件管理的区别
安全带。此外,要加强对全社会的安全法规教育,使人们了解高速公路与一般公路的区别,加强高速公路安全附属设施的管理及维护,从而杜绝乘车人在高速公路上随意上下车及行人穿越高速公路现象的发生。
五、保持良好的车况,严禁超速行驶,注意保持车距,严禁超载。对超速、超载的车辆进行必要的处罚,并结合安全教育,使其认识到问题的严重性和危害性。
六、优化公路的设计
我国的高速公路设计是以汽车的计算行驶速度来决定线形标准的,但是在高速公路上,许多汽车都是以大于计算行驶速度的速度行驶的,所以,笔者认为公路的设计应以一个大于计算行驶速度的速度为标准来计算各种线形指标,这样做,虽然工程造价提高了,但交通事故却会下降,那么社会效益还是比较好的,而且随着汽车工业的不断发展,这样也适应汽车性能不断提高的要求。此外,在道路设计时,选用合适的线形标准,注意道路的平纵线形配合,道路的路面设计及施工应符合国家规范要求,且在道路投入运营后,注意养护与维修,在线形不好的事故多发地带要设立醒目的标志提醒驾驶员注意。
第四部分:结束语
本片论文是笔者针对国内外高速公路事件管理,查阅资料并提出了个人的一些粗浅的看法。如何提高我国高速公路管理的科学化,协调好人、车、路及管理部门的关系,建立一套符合中国交通实际的管理体系,为人民群众提供更安全的公路交通,是安全管理科学中的一个重要课题,需要我们这一代青年去探索和努力。希望能在今后的学习中继续学习智能交通相关方面知识,努力实现我国交通的最大智能化!
第五篇:委托、行纪、居间合同的区别
(一)委托合同与行纪合同的区别
行纪合同是行纪人以自己的名义从事贸易活动,委托人支付报酬的合同。委托合同与行纪合同都是基于双方当事人的彼此信任而产生的,又一方办理委托事务,其法律后果由委托方承受。但是两种合同存在区别:
1、行纪合同必须是有偿的,委托人要向行纪人支付报酬;而委托合同可以是有偿的,也可以是无偿的。
2、行纪合同的主体具有限定性。在我国,行纪合同的委托人可以使自然人或法人,但行纪人只能是经批准经营信托业务的法人。而委托合同的受托人则没有什么限制。
3、行纪合同的行纪人是以自己的名义办理行纪事务,委托人不和第三人发生法律上的权利义务关系;而委托合同中的受托人可以以委托人的名义办理委托事务,也可以以自己的名义办理委托事务。委托人有可能与第三人发生权利义务关系。
(二)委托合同与居间合同的区别
居间合同是居间人向委托人报告订立合同的机会或者提供订立合同的媒介服务,委托人支付报酬的合同。两种合同非常相似,但是他们是有着本质区别的:
1、受托一方的法律地位不同。委托合同中的受托一方为受托人,他在与第三人从事民事法律活动的过程中,实际上处于类似委托代理人的地位。而居间合同中的受托认为居间人,他不介入委托人与第三人所签订的合同关系之中,在居间合同中他只是一个中介服务人的地位。
2、受托一方委托的内容不同。
委托合同中受托人接受的是办理委托事务,而委托事物的范围,既包括法律事务由包括非法律事务。但是在居间合同中,居间人接受委托的内容则指限于为委托人报告订立合同的机会或介绍委托人与第三人订立合同。
3、受托人的权限不同。委托合同的受托人在委托事物的范围
有权独立进行意思表示,它对于委托实物具有一定的独立的决定权。而居间合同的居间人并不介入委托人和第三人订立合同的活动,不能独立表达自己的意思。
4、合同的有偿性不同。
委托合同可以是有偿的,可以是无偿的,但是,即使是无偿合同,受托认为委托办理委托事务所支付的必要的费用,委托人还是需要享受托人支付的。而在居间合同中,居间人除非法律有规定的情况下都是收取报酬的,但是如果委托人和第三人没有达成协议或合同的情况下,居间人是没有报酬的,也不得向委托人收取相关的费用。