C#移位运算符小节
左移运算符(2=0011001,1100100右移两位后为 口口11001,补0后为0011001。 比较有意思的东西 10进制中左移一位相当于是添加一个0,即扩大了10的一次方倍,左移两位则是添加两个0,即扩大了10的二次方倍;同理,2进制左移一位也是添加了一个0,即扩大了2的一次方倍,左移两位则是添加两个0,扩大了2的二次方倍,那么就有下边的关系: n4,相当于 n/16
左移运算符(2=0011001,1100100右移两位后为 口口11001,补0后为0011001。 比较有意思的东西 10进制中左移一位相当于是添加一个0,即扩大了10的一次方倍,左移两位则是添加两个0,即扩大了10的二次方倍;同理,2进制左移一位也是添加了一个0,即扩大了2的一次方倍,左移两位则是添加两个0,扩大了2的二次方倍,那么就有下边的关系: n4,相当于 n/16
我:“儿子,到院子里除草去,我要看会书。” 斯科特:“爸,我已经打扫过院子了。” 斯科特:“爸,我已经把草放在除草机上了。” 斯科特:“爸,除草机不能启动了。” 我:“让我来启动它。” 斯科特:“爸,我做好了。” 这个简单的交互展示了回调。我给了我儿子一个任务,并且他可以报告状态来(重复的)打断我。而当我在等待他完成任务的每一个部份时,我不用阻塞我自己的进程。他可以在有重要(或者事件)状态报告时,可以定时的打断我,或者向我询求帮助。回调就是用于异步的提供服务器与客户之间的信息反馈。它们可能在多线程中,或者可能是简单的提供一个同步更新点。在C#里是用委托来表示回调的。 委托提供了一个类型安全的回调定义。尽管委托大多数是为事件使用的,但这不应该是C#语言中唯一使用这一功能的地方。任何时候,如果你想在两个类之间进行通信,而你又期望比使用接口有更少的偶合性,那么委托是你正确的选择。委托可以让你在运行确定(回调)目标并且通知用户。委托就是包含了某些方法的引用。这些方法可以是静态方法,也可以是实例方法。使用委托,你可以在运行时确定与一个或者多个客户对象进行交互。…
这边我们借助一个组件MyXls来生成Excel,代码比较简单,下边的类实现将DataSet或DataTable转成Excel: 调用示例: 效果图: 经测试生成的Excel使用Excel2000、Excel2003均能正常打开! MyXls官方站点:http://myxls.in2bits.org/
在IE中选择查看源文件时,系统默认是打开notepad来查看,但安装UltraEdit后,被改成了使用UltraEdit查看源文件,比较不习惯。恢复方法: ①.展开注册表:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\View Source Editor\Editor Name; ②.默认值原为C:\Program Files\IDM Computer Solutions\UltraEdit\uedit32.exe,修改成C:\WINDOWS\system32\notepad.exe即可;
WinForm应用程序做资料录入时,有些内容我们不希望让用户手工录入,而是弹出一新窗体让用户选择内容,这时我们就需要一个类似控件: vs2008中没有这样的控件,但通过组合TextBox和Button控件可以实现要求,这样我们得做个用户控件来满足需求,命名为ComboTextBox。 第一步:新建用户控件ComboTextBox,在界面放置好TextBox和Button后,控件代码(ComboTextBox.cs)如下: 第二步:主窗体代码(Form1.cs)如下: 最终效果: 点击这里下载源码,使用vs20008开发。
粗略的看一下,感觉实现接口和虚函数重载是一样的。你定义了一些对象,但是这些对象是在另一个类型里申明的。你被第一感觉骗了,实现接口与虚函数重载是完全不同的。在接口里定义的成员默认情况下,是根本不存在实际内容的。 派生类不能重载基类中的接口成员。接口可以隐式的实现,就是把它们从类的公共接口中隐藏。它们的概念是不同的而且使用也是不同的。 但你可以这样的实现接口:让你的派生类可以修改你的实现。你只用对派生类做一个Hook就行了。(译注:相信写过C++程序的人就知道hook是什么意思,而且我也实在想不到把hook译成什么比较好,所以就直接用hook这个原词了,就像bug一样。) 为了展示它们的不同之处,试着做一个简单的接口以及在一个类中实现它:…
页面中的一些操作需在用户控件的按钮(以下简称按钮)点击时激发,这就需要在页面中监听按钮点击事件,一种实现方式在用户控件中添加自定义事件,在页面中订阅事件,按钮点击点激发自定义事件,代码如下: 1). 用户控件WebUserControl WebUserControl.ascx: WebUserControl.ascx.cs: 2). .NET页面 Default.aspx: Default.aspx.cs: 效果图:
抽象类在类的继承中提供了一个常规的“祖先”。一个接口描述了一个可以被其它类型实现的原子级泛型功能。各有千秋,却也不尽相同。接口是一种合约式设计:一个类型实现了某个接口的类型,就必须实现某些期望的方法。抽象类则是为一个相关类的集合提供常规的抽象方法。这些都是老套的东西了:它是这样的,继承就是说它是某物(is a,),而接口就是说它有某个功能(behaves like.)! 这些陈词滥调已经说了好久了,因为它们提供了说明,同时在两个结构上描述它们的不同:基类是描述对象是什么,接口描述对象有某种行为。 接口描述了一组功能集合,或者是一个合约。你可以在接口里创建任何的占位元素(placeholder,译注:就是指先定义,后面再实现的一些内容):方法,属性,索引器以及事件。任何实现类型这个接口的类型必须为接口里的每个元素提供具体的内容。你必须实现所有的方法,提供全部属性访问器,索引器,以及定义接口里的所有事件。你在接口里标记并且构造了可重用的行为。你可以把接口当成参数或者返回值,你也可以有更多的机会重用代码,因为不同的类型可以实现相同的接口。更多的是,比起从你创建的基类派生,开发人员可以更容易的实现接口。(译注:不见得!) 你不能在接口里提供任何成员的具体实现,无论是什么,接口里面都不能实现。并且接口也不能包含任何具体的数据成员。你是在定义一个合约,所有实现接口的类型都应该实现的合约。…
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string args) { string str = "1,2,3,4,5,2,1,9"; string ids = str.Split(new char { ',' });…
两行代码完成转换: 若要改变图片宽高,可修改如下: 转成gif时失真比较严重,有等改进!