C#设计模式——命令模式(Command Pattern)
一、概述
通常来说,“行为请求者”与“行为实现者”是紧耦合的。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这些情况下,将“行为请求者”与“行为实现者”解耦,实现二者之间的松耦合就至关重要。命令模式是解决这类问题的一个比较好的方法。
二、命令模式
命令模式将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
命令模式的结构图如下
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYQAAAD+CAIAAAC1EeWXAAAX2klEQVR4nO2dyZWEIBRFDcVQCIVQCMVFB0IgFYR7F/Ti6feXWuVQgojvnl5UKw4oXJnEKhBCSAZUV58AIYSEQBkRQjKBMiKEZAFlRAjJgl5GTfPniqZp/i65vrywZdK1V1/46ISuTXxRexlVVXV13ONSVdeUAXlhi8Q5Z4y5+tpHBLFLfFVHGSU+cGIulNElx01G8RFcBDn26rOIyCURpIzKPG4yio/gIpRRDCijMo+bjOIjuAhlFAPKqMzjJqP4CC5CGcXgZBlZ6+ra1LUxxnjvQwje+7ruf9f1zlaxrj3ritxLRs65ujY/HtpaY+2vO1mFMvqCf3lrDXKEtRnJazUn3l5Gxpi6Nk3z1zR/uAEhBO99VVWQkXMOPzYCqf1+YuGRMjLmtKv3BcroE/7lkYARuKqqTHyks+Qn7i0jxFBGnXjvERkdc2sNAuCJobsPrXXW9n2KuGdN81dV1VmPlJvKqGn+cNGMMdYa//Lee2OMf/kQQuhaXQKFfeSSioycc9YaDBsZrnC/B//y2GTcZ5II3p0teRVlIhmtM27StdY63B0xgrUGtwkLJ53r39fOb/0Q/i2Y3Po+dX0dRnRvGcH9c91qGUnhEIpBDQ5LjDEyJAdSw1oUtX48t3BbGckTFYVNVLtE0BIMFxk215cUZtclU1xP1KZlw18GlVBGn/hUFZJGjP4udK1/9XdBp/nxHn1diwcSqiM6o6FtRIJJtkIaWC13P0VGUobCxcLTW9cptLMeXk3T9TVd0sFCsZK+erIWtWZdO5CnsTTkbSmxx4jg3VnNq7iw8zC9Ml4+qKyhF8o9FY98XxuGWohkwEldZJJUht9Fy2heTUPVYC4jXFynCJTRO99lFLoWl0jS6CcZVVWlKwt4JMplp4wOsy6j15uM+sq19/qGysWflHBxO1ClCrPy72Qt7i8qcfM0o0vTcjJb+pHuLaMwPIqRxPE7LJaMXqO2ULMIX2V0rC1jQlEyGpLgREDeexTakf4kvHqc9mLCDZo8KlJG8O5syas6O0jNaKxMda3cIPmByrg8OSZZY3Ft/6NrJcd9ykpSpNpyx28vI92Rab527UvFVYLpfmgJhr2d0j9dgIz0JUK61K1pb4MqXm+XFIElA0j5KLzfnZQRvDtb8qo8kpGG5Zk6zyMqwY+FoHmuWVwr933epKiD6Ry3paP29jIaSf6+7yr3ktGNKD6Ci+zIq5/ywol5ZOOu9hyxIBnlB2UUieIjuMgleTUllFFEKKNIFB/BRSijGFBGZR43GcVHcBHKKAaUUZnHTUbxEVyEMooBZVTmcZNRfAQXoYxiMMrIFc2FMro66nF5rIwMp509m1FGpmgulNHVUY9LeTLCgKzvYTC6p2DOekF9F6ymlXncZJQXQadeNv4SJn3BISWXRJAyKvO4yViOYNc2zV+GY1+30rVumOFgcT1lFAPKqMzjJmMeQWRjzMfwy4sml+Nf/RQccyVRRjGgjMo8bjJ0BMcJqro2DDO3ybxuN0UmAtRipYxiQBmVedxk9BHs2j7HzqZYwGu6Yqib4ofZFOW9U8rodCijMo+bDIxdWJmQs2vRW3zrWlsYlGStkalvSoUyighlFAmMXdhS6sHcScVg4n/s4EIoo4hcFcEnXNi+/vJ1DjyUKe5eWZNeNnPFmMCUUEYRoYwigQhOmq7f+NycdCcGDSGObDOKAWVU5nGTMUZwyK5jw9DaaJ178K4hLKOMYkAZlXncZEwiiO58Y/pvvd29XvapK5AyigFlVOZxk7EYQXwb5tb1suFDdW4xFpRRDCijMo+bjPIiKP33X2RKGcWAMirzuMkoL4LOuTy/5JMSyigilFEkio/gIpRRDCijMo+bjOIjuAhlFINRRsWT+MrywhYMvstaNpxcLRZXRZAXtkhYMooBZVTmcZNRfAQXoYxiQBmVedxkFB/BRb7kVfdO4tHn6Af8/aCUUUQoo0gUH8FFvuRVjNiOJCNrv00VIIMStoxO+A5lFBHKKBLFR3ARnVcn+fbt7bwBvUR++5effomka/USGXXZ/+haPSfUdPOu1ar6cYYTyigilFEkio/gIntl5JxD55TMymatw2/xi7zNhyUYCI7NZYl8tmS++aQU9uM0CZRRRCijSBQfwUWQV6111pq6xlfG+skJ8K/8SZY2xiB8CMG/fF33ohHp1PUwR13XNs3fXEZhqKYtbj6fpfuXGiJlFBHKKBLFR3CRvSWjMEx0iVX4rZ2FDSfhP8poafNzPxlAGUWEMopE8RFc5ICMMHO22ES36SC8ltFKyWhpc8roNlBGkSg+gou85dWu1Y3Qk940BJu3GWHKJ++9LEGYcUnXwmuYzESMg8rXfHNr3+pl1v70+QPKKCKUUSSKj+AiX/Kqm4GFOoAOqQ3SNH96ifce/0qvGZbg92RziEl2xd60fKGMIlF8BBe5JK+uIl37kNovu6KMIkIZRaL4CC6Sp4z8y6Og9Pu5UUYRoYwiUXwEF8lTRidCGUWEMopE8RFchDKKAWVU5nGTUXwEF6GMYjDKaN4LsAX0LCbj8OEulNGJ0c+Qx8oIr24kI3FGu+STuZVc3ANgLPyJl2AVjLs/tm3iK/vLhb0Xl1zYa0EXezIwseThlH+MH9/7P8BPj7XJSNAETIaZEvIEMMRxfHmtUCgjQrIG5ZTwgIYqyoiQjOla/TZ/2emfMiIkX2RmEpA+x6WEMiIkU5rmbz7P7OSF2JKgjAjJEl1B27L8/lBGhOTIl+bqxRJTAdxsxBplRJ7A6mO+yIxAGRGSHavpvJ8Gu6zKGmVESF5sHE9U3rAjyoiQnNjePl3csCM2YBOSEXgNbTsltWRTRoTcgCfMjkAZEXIDKKMVKCNC0kAZrUAZEZIGymgFyoiQNFBGK1BGhKSBMlqBMiIkDZRRdlBG5JlQRtlBGZFnQhllB2VEnglllB2UEXkmlNEKbMAmJA2U0QqUESFpoIxWoIwISQNltAJlREgaKKMVKCNC0kAZrUAZEZIGymgFyoiQNFBGK1BGhKSBMsoOyog8E8ooOygj8kwoo+ygjMgzoYyygzIiz4QyWoEN2ISkgTJagTIiJA2U0QqUESFpoIxWoIwISQNltAJlREgaKKMVKCNC0kAZrUAZEZIGymgFyogUg395lzFVVV19Ct84JVfeTLeXyMgYUxVN4idKnljrrDVXZ+qPGGOuPoWPWOtOSUKU0TpV6SXk4iO4BWtd0/xdfRa35Kwa0s1SIWUUg+IjuAXK6DCUUTqKz6vFR3ALlNFhspDRQxqwi8+rxUdwC5TRYSijdOzKq9Kq1zR/v5+q99459+NOVqGMgpKRf3lrTV2bujbWpkje3vvvScVah/PJqje5rg0SJ2WUjl15ta5NVVVIOvgLXXv40M65uo5+hSmjIDLqWuT5pvnDxY/tI//yVVV9eeQYY+raNM1f0/z1KSoPKKMbyEiuifdv6cy/Zg/Arp0/Fb33/uV1gE8L5/v03vdr9xiQMgqDjHr7D1cPCsBvpHZ0scsm1jrnnDHG2vEuW2uMMdYa3DIEs7YPM4Qf1+LphQNN1iIJ6XPQyWk4kJOzlfNxzskJI4VgFbrhES8caLI3Cd80f9YaCSbJD8FwoSij28ioaf4kJaGkjaecpDMpPSFN+Jde0idcPAmxOXYraWi+T9l8V/MHZRQGGeFiztdCCsjPkgkxAA21crnRyM/YFVKCBBPZwRo4ELa11kA0i2sX0nzXItlAPTiQG8ZGIuHhNCRBSgkL+kN8JS5QDHL0+4n1wYYk97YTyih3GelqGpyCovjwgOrvqzjFe2+tC12LBBGGpI8xwUgZ/RLvZVeL+zxWraCMwpqMJMMH9YTQC5Gr5TaFEKR4pYNJ0QOPIvyQXD1f+0lGuv4uB52kFr1P/UPvU2QUhmKXlpF+/mFbHZ4loxvISD9hUGCRJxV0g3us76tsC5vI82eSIFDgx5KN+zw9gqWyWE1DvSacJyPcYunlmMjo01pdTbPWhK49XUZIQogvZbSJu8gohCBNoUEllzA064S+FNOXm5xzoWt1qkVgnSCk/VJSwOI+KaNjTBqwvfe6eoIbgessRdq5jILc1q6VXK2D4TGDdj1jTOjasQG7a+drw6AJiEmeOlpSc30ckJGur32RUf+ja/EszEhG6bmTjIbCi04TusVB6uSSwiS8JEqdIMLw5Jw8cvU+KaPDjF37Q56f1Hnf+tdfb7XjoK68PDOk5U4Hg8v0QyWoAtHiWj3UQKd/3Hf8TR5dqOWJXKS5ZyrWmYNg0rmMZFtp6ER4yihrGTn3NnYOJf8QAsyyuBapcHGJfx9npDt3FvfpDr0/fXcZWevGrsYfdjK5tj/u8HwyPKUQAmWUkrvn1VXuHkFUr37cCUdgH4YySsfd8+oqF0ewa9FAI+1ffdlwAEvmJUpJCZCRVpL8RkjdAIwWunlJijI6TBYyYgN2GVwbQWngkDZauEna/mWJNBvDXBiSF4ZUoRUmLbXWOqzSAw4po3OhjNJBGUVFpyIRjThI33G9XAurD9O1+BdD8kII0gkF34XhzcHF06CMDkMZpYMyispERhroRt9xaEWQspIfBn+i70m6ijQyseziaVBGh6GM0kEZRUWnIvFIGNp99BK4ZkxyaCdSqQJlIgkwGb4YVkpGJudpZ3Mmi2lnnyOj4kl8STU6FcE1SOJ9m9GwBKPPw/vrqRMZhfeRVihY6W2x58XTwAAfcozFd2j28mgZoRF0dYfX5tUErEbQv3zUWsxbc/J8JoPZkv7fodSjN5+0TGNWAz3hwadBAKymHYbVtHOYz5Aw59EyGl5rKD6jUkaHoYzOZHgLyS0+Nh8qo+FllIdk0S0y+pL20rce5EMWMkpPJBmBcXqXdyU9TkaDhuaXomC2yOjL9CxpJqjNE8ooDkv58EEyeqSGwFxGaFJEF1sYXpSVhnC9Sr/fj7EFsuoJUEYxec+TD5HRp4LhQ5jLSEYGyIu4ajK8cWCUDHGSrfzwDv1DfPRcGaFbNw1m+LD11fGOC+JoMv6AcgKqqnLDKymwCXo29CtveiYQP0x4pGXkh1dbwCkd3vmThYzSN2DLDBtpwKQtlNETQMlI5tLHlZHpqBeNoweIL8rIsWS0h5vJKBmIGkYhPUFGGElkzFP6zubM5zMSJYlWzPD+rVjmzVNdK+/HBZna/AFQRrHw7x94CU9qwEZrSKKGucyYtxm54atBRs0Ai+eTTFWORgNsbozxLy/fBXnOZaSMzkc+HTVJQ8+REZjr+AmcPOjxSZ0AlNGZoJLyaYDf02QExorqzzO63gKOwD4MZXQSG8YZP1NGQMamF68kyugwlNEJSN/H90L1k2UEdB92qVBGh6GMTmJD3Z4y6im6HYQyOkwWMnoIlNEToIwOQxmlA2NzC4YyCiHIaHtygOsnV3sIVVWZoqkoI5aMfoAlo3QUn1eLj+AWKKPDZCGjEhqwN1B8Xi0+glv4IqNJrTals/zL+5fHe7nJDroXyigd3/Mqur2/78EP30rdNwVX18rsOVHTImUUvspo8u7ruTL6niRkbf/uW5ZQRunQedXN3sPGO0pfEqj3XrbaNXQQX0OVo2zfcC+UUXiXEaQjqxbHWE0+END/eL19KWBcov7VP5CD9EK9OeaokENk+9otZZQOnVenhSC8pa3e1Q6zuf4wD0nT/OGlk3mAMOSEtzfj3vepxRQ1go9lr4zc8Mls/a6sfENpeJV/XIKqltxTM3yzW0b/zzfXngrztJcNlFE6kFcx55Z8MRmrpNBu1GulaloJh481I7HK5dKJ1Q1zUyBlyyeb9VNx/m+MCD6c4XnQT2KF9/Jxc/Gv/MmNwF2T2WZFFlLe0UvAREZBJkKabR5m9pm4KR8oo3RUVYVX2NwwF61Ojkhk8pnA+TWZyGjScoQEp12GtZOHc9RLTRmF/SWjEALmupIGQQy3kb/FlPBRRrPNw6KMsmzGpozS8amahuhLuyamTF6VER6/kx1SRpdzQEaYz0hs8lZVfy8H9d+S/CqjyeaBMrrkJDJH51VdqJm0W/d1LtXWgzQ9LRmpAjnaicI2GcVrv6SMwqQ37f3Ds5PeNNyXeZsRnjS4U5Ml/f3tWnhNv3gsPxY3n5xGqouxjyxk9BA+5dVJ4pBbIl+pNcPX4vtZOIYKmlNTCMpnJyYywjfmZedRh7dQRmHPOCORkQ6gQ+r9yAMJ/+LJBOlANLo1cLK5/o1OjxPjeyKUUTquyqt6aEnUEihlFHIdga3GGUXsTv0RyigdV+VVqd81zV/UfEIZhVxlJGWovX2pus83NpRROi7Mq/3QuMgdupRRyFVGh5m0OUYlCxk9sAG7SIqP4BYoo8NQRukoPq8WH8EtUEaHoYzSUXxeLT6CW8CIoXnH2WFSfod9jjHGpPpEML4Z9/stoIzWiTY9XkZcfY2vB90FZ4Gvol/oo5QycieNO6GMCDkZed/1wjHTcMQlhz4MZUTImcjb0WaYzuESH1FGhDwaaQUfs8ZFPko5zugsKCNCzkH3x71ljevKR/eCLZeEnMBkZMD0OU0fbYAyIuRX8CL+ZMm00rD/lY6nQRkRcj7+NdVT6hN4WpsRISRP2JtGCMkCyogQkgWUESEkhAzajCgjQkgIGWQNyogQEkIGWYMyIoSEkEHWoIwIISFkkDUeN87o8itOSJ4waxyAgx4JOR/K6ACUESHnQxkd4AQZ4QOqc/Q4C4ZhmEeFuXyc0ePajIB/+WXU174YhmGeFuZaHtebRgjJE8qIEJIFlBEhJAsoI0JIFlBGhJAsoIwIIVlAGRFCsgAjDa4+i31QRoSQLKCMCCFZQBkRQrKAMiKkQNhmRAjJAvamEUKygDIihGQBZUQIyQLKiBCSBZQRISQLKCNCCsd7X5FtGGNC126/tpQRITtomj9rb1biuIq9PqKMCNkBZbSdqqp2XS7KiJAdUEbbqaoq7Gm9oowI2QFltB3IKIRgjNnybgplRMgOKKPtiIxC1xpjVr/jRBkRsgPKaDujjELwL7/amE0ZEbIDymg7WkZBPvn92UeUESE7oIy2M5FRWLt6lBEhO6CMtjOXUfjauUYZEbIDymg7izIKnzvXKCNCdkAZbeeTjD51rlFGhOyAMtrORxl96FyjjAjZAWW0nS8yCkuda5QRITugjLbzXUZhdjEpI0J2QBltZ+NMI03z14e/9nQJuReU0bnonn7KiJAdUEbnQhkRchDK6FwoI0IOQhmdC2VEyEFiyOicT1F37cY5zA4cDuGlpflEKCNCDhJDRk3z93s+d87V9bc5zJrmT5yy63DOOWwoP06EMiLkIMsy6lr/8jJ+b170mC7pWu/9+D5E1/Z7kPD6t962a8NQTplQ12Z+bnpb51zvoK4dT/Xlvff6334rdW7WGtmhMePvU6CMCDnIYoY3xhhjnHN4y8E5Z62TYFjinENObpq/IYyBHbDWWicFFgxNnu8NO5m/aCpnVddv4hiP27XWGuccanPI/9itLlLVtUEwWTIqbNjn6oSNu6CMCDnIJxnht/glDO+m6/BN8xe6tq6H/Ny1cAcyZP+6VgjeexRG5nv7NP+Gtb07xGjz4+ralj6cjkJd9+9nNM0fDjQR38RNv0MZEXKQ7zIyxtT1+OcGdHgdAAUQCTMUYfoMv2VvIfRSs9ZYi2LTKDgdaiIj0Y2cVVAFK5xVWJLRxmbyjVBGhBxkVUaSdXXOlyX+5XVNahIGgti4N2GycF6GwnGnJSN12pjTI1BGhNyI7zLCbzQb91UezN2jlqANCDW4eSmmro3sf763qWKGhh7djtM0f9aaT8fVOzHGoIutb05akpFuyQqqPngWlBEhB1noTetanV3HUonqopJmGtmJbnzRfV5o3/m0Nx2y/z0fXjQsmR53aDYadzKISc5k3FXXIoz3XseXvWmE5MIDR2BL1/6kmekUKCNCDvJAGfmXlyEIp++cMiLkIA+UUVQoI0IOQhmdC2VEyEEoo3OhjAg5CGV0LpQRIQehjM6FMiLkIJTRuVBGhByEMjoXyoiQg1BG50IZEXIQyuhcKCNCDkIZnQtlRMhBKKNzoYwIOQhldC6UESEHoYzOhTIi5CCU0blQRoQchDI6F8qIkINQRudCGRFyEMroXCgjQg5CGZ0LZUTIQSijc6GMCDlI0/xV5FQoI0JIXlBGhJAsoIwIIVlAGRFCsoAyIoRkwT+gBUytov16gwAAAABJRU5ErkJggg==" alt="" />
Command定义了命令的接口
ConcreteCommand实现Command接口,定义了具体的命令
Client用于创建具体的命令并设定接收者
Invoker要求Command执行相应的请求
Receiver实施与执行一个请求,任何一个类都可能作为Receiver。
三、示例
假定要实现一个绘图系统,要求支持撤销功能,下面就用命令模式来实现这一需求。
首先定义一个抽象的命令接口
1 publicinterface IGraphCommand
2 {
3 void Draw();
4 void Undo();
5 }
接着实现具体的绘图命令

publicclass Line : IGraphCommand
{
private Point startPoint;
private Point endPoint;
public Line(Point start, Point end)
{
startPoint = start;
endPoint = end;
} publicvoid Draw()
{
Console.WriteLine("Draw Line:{0} To {1}", startPoint.ToString(), endPoint.ToString());
} publicvoid Undo()
{
Console.WriteLine("Erase Line:{0} To {1}", startPoint.ToString(), endPoint.ToString());
}
} publicclass Rectangle : IGraphCommand
{
private Point topLeftPoint;
private Point bottomRightPoint;
public Rectangle(Point topLeft, Point bottomRight)
{
topLeftPoint = topLeft;
bottomRightPoint = bottomRight;
} publicvoid Draw()
{
Console.WriteLine("Draw Rectangle: Top Left Point {0}, Bottom Right Point {1}", topLeftPoint.ToString(), bottomRightPoint.ToString());
} publicvoid Undo()
{
Console.WriteLine("Erase Rectangle: Top Left Point {0}, Bottom Right Point {1}", topLeftPoint.ToString(), bottomRightPoint.ToString());
}
} publicclass Circle : IGraphCommand
{
private Point centerPoint;
privateint radius;
public Circle(Point center, int radius)
{
centerPoint = center;
this.radius = radius;
} publicvoid Draw()
{
Console.WriteLine("Draw Circle: Center Point {0}, Radius {1}", centerPoint.ToString(), radius.ToString());
} publicvoid Undo()
{
Console.WriteLine("Erase Circle: Center Point {0}, Radius {1}", centerPoint.ToString(), radius.ToString());
}
}

然后再定义绘图类作为命令接收者

1 publicclass Graphics
2 {
3 Stack<IGraphCommand> commands =new Stack<IGraphCommand>();
4
5 publicvoid Draw(IGraphCommand command)
6 {
7 command.Draw();
8 commands.Push(command);
9 }
10
11 publicvoid Undo()
12 {
13 IGraphCommand command = commands.Pop();
14 command.Undo();
15 }
16 }

最后看一下如何调用

1 staticvoid Main(string[] args)
2 {
3 Line line =new Line(new Point(10, 10), new Point(100, 10));
4 Rectangle rectangle =new Rectangle(new Point(20, 20), new Point(50, 30));
5 Circle circle =new Circle(new Point(500, 500), 200);
6
7 Graphics graphics =new Graphics();
8 graphics.Draw(line);
9 graphics.Draw(rectangle);
10 graphics.Undo();
11 graphics.Draw(circle);
12
13 Console.ReadLine();
14 }

C#设计模式——命令模式(Command Pattern)的更多相关文章
- 设计模式 - 命令模式(command pattern) 多命令 具体解释
命令模式(command pattern) 多命令 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.csdn.ne ...
- 设计模式 - 命令模式(command pattern) 具体解释
命令模式(command pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 命令模式(command pattern) : 将请求封装成对 ...
- 设计模式 - 命令模式(command pattern) 宏命令(macro command) 具体解释
命令模式(command pattern) 宏命令(macro command) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考: 命名模式(撤销) ...
- 设计模式 - 命令模式(command pattern) 撤销(undo) 具体解释
命令模式(command pattern) 撤销(undo) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.cs ...
- 乐在其中设计模式(C#) - 命令模式(Command Pattern)
原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...
- 二十四种设计模式:命令模式(Command Pattern)
命令模式(Command Pattern) 介绍将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可取消的操作. 示例有一个Message实体类,某个 ...
- 设计模式-15命令模式(Command Pattern)
1.模式动机 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个,我们只需在程序运行时指定具体的请求接收者即可,此时,可以使用命令模式来进行设计,使 ...
- 设计模式----行为型模式之命令模式(Command Pattern)
下面来自head first设计模式的命令模式一章节. 定义 将"请求"封装成对象,以便使用不同的请求.队列或者日志来参数化其他对象.命令模式也支持可撤销的操作. 类图 注: 1. ...
- 设计模式(六):控制台中的“命令模式”(Command Pattern)
今天的博客中就来系统的整理一下“命令模式”.说到命令模式,我就想起了控制台(Console)中的命令.无论是Windows操作系统(cmd.exe)还是Linux操作系统(命令行式shell(Comm ...
随机推荐
- 高并发WCF配置
在使用WCF做服务接口时,TCP模式肯定比Http效率高,Binary/MTOM格式的绑定也会Text格式的绑定高效. 两个endpoint,一个用来调试:ms-mex的binding是用来方便WCF ...
- OsmocomBB 编译安装
工具: sudo apt-get install libtool shtool autoconf git-core pkg-config make gcc gnuarm: ## 32 bit wget ...
- android 性能分析、优化
.主要介绍了一些分析工具,比如GT.ITest等http://www.jianshu.com/p/8b77d394b2a6 .详细介绍啦android平台常见性能优化工具http://blog.csd ...
- JS表单设置值
//表单设置值 $.fn.setForm = function(jsonValue) { var obj = this; $.each(jsonValue, function (name, ival) ...
- drupal7 Views Slideshow 简单教程
一.下载安装(略) 二.内容类型建立(过程略,首页幻灯),字段建立(过程略)主要有2个字段,图片字段 和 指向链接字段 三.view 1.建立一个新的view,名称为frontbanner 显示为内容 ...
- Winform下richtextbox截图实现
#region 根据richtextbox创建GDI+ private void DrawGDI(RichTextBox rich,Panel panl,PictureBox p2) { rich.U ...
- [AX2012]发送广播邮件
AX 2012可以使用MAPI或者SMTP发送邮件,MAPI是客户端方法,需要outlook的协作,而SMTP则是服务器端方法,要求SMTP允许AOS服务器通过它中继.这里要讲的就是如何通过SMTP发 ...
- 从今天起,记录CEF使用开发心得经验
已经使用CEF来呈现桌面程序界面大半年了,从来没有写过相关博文.发现网上的中文资料甚至英文已经无法满足我的开发需求,不少问题只得自己探索.在此先谢过网络上各位CEF使用开发博文的贡献者,没有你们我也难 ...
- 解决Visual Studio 2010新建工程时出现『1>LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt』错误
VS2010在经历一些更新后,建立Win32 Console Project时会出"error LNK1123" 错误. 解决方案为: 第一步:将:项目|项目属性|配置属性|清 ...
- U3D中IOS平台泛型方法尽少使用
U3D的IOS最小运行库use micro mscorlib是不包含泛型反射方法的,如FieldType.GetGenericArguments方法.所以尽量少用List而直接使用array. 另外请 ...