C#学习笔记

1. using(MyClass obj = new MyClass())

{

// code here

}

只要MyClass支持IDisposable接口,那么程序执行到闭花括号时,会自动调用MyClass.Dispose()方法撤销对象

using作为语句,用于定义一个范围,在此范围的末尾将释放对象.

2. System.Diagnostics.Stopwatch提供一组方法和属性,可用于准确地测量运行时间

3. c#不支持不定长数组,可以用list的ToArray方法转换

4. Environment.ProcessorCount可以获得机器处理器个数

5. 224.0.0.0 到 239.255.255.255间的ip用于多组发送,255ip如192.168.100.255用于同子网广播

6. BitConverter可以做byte[]和其他类型的格式转换,Encoding可以做string等和byte[]的编码转换

7. Buffer.BlockCopy可以用于byte数组拷贝

8. 计算MD5:MD5 md5 = new MD5CryptoServiceProvider(); md5.ComputeHash(filestream);再将返回的字节数组转成16进制字符串就ok了。

9. ip和端口完全相同时才能连接成功,如果本机启动时监听的地址不是127.0.0.1而是外部IP,那么连接127.0.0.1时会报目标机器积极拒绝,只有连接外部地址,才能连接成功. netstat -n命令可以查看已绑定的ip和端口

10.程序中同时有2.0和4.0的dll时,在app.conf的startup节点增加一个属性,就可以兼容了。<startup useLegacyV2RuntimeActivationPolicy="true">。但注意要加到app的app.config里,而不是dll项目的app.config

  同时在程序发布时,还需要发布*.exe.config文件,该文件就是app.conf的内容,看样子,c#的配置文件是外挂方式,而非内嵌。

11.tasklist /m命令可以在控制台列出程序加载的所有dll信息 tasklist /m | more

12.控件的dock属性设置为fill时,如果和其他控件(例如dock=top或left)有重叠,将控件设为最顶层可以解决

13.vc2012调用gdal需要链接C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x86\odbccp32.lib和C:\Program Files (x86)\Windows Kits\8.0\Lib\win8\um\x86\odbc32.lib两个odbc库

14.ComponentDocumentDesigner和ComponentDesigner的区别:前者用于控制继承类的design页面,后者用于在应用这个组件时控制右键菜单。

  ParentControlDesigner和ComponentDesigner的区别:前者放到form上可显示组件UI,后者没有组件UI,只能在最下面显示一个图标,像backgroundworker那种无界面组件的UI图标。

15.oracle查询空间索引的sql:select * from user_sdo_index_info t

16.(float[])Convert.ChangeType(nData, typeof(float[]))可用于将泛型T[] nData转换为指定类型float[]。

17.usercontrol在设计模式下,即DesignMode==true时(组件被用于vs设计窗口里时),application.startuppath是ide程序所在目录,不是代码所在目录。设计属性时需要注意区分。

18.[EditorBrowsable(EditorBrowsableState.Never)]可以使属性不出现在IDE的编码上下文提示列表里,但直接写的话仍然可以正常访问,[Browsable(false)]使属性不出现在属性窗口。

19.等待多个子线程结束可以使用ManualResetEvent数组和WaitHandle.WaitAll(manualEvents)方法,参见msdn中“WaitHandle..::.WaitAll 方法 (array<WaitHandle>[]()[])”

20.Marshal.PtrToStringAnsi可将string转的IntPtr再反转成string。

21.wcf寄宿到windows服务时,服务需要以“本地系统”的方式启动,否则会报http无法注册的问题,也不能写windows事件日志。在topshelf中是调用RunAsLocalSystem。

22.GDAL运行报错安全透明方法尝试通过方法“”调用本机代码失败,解决这个问题,可以在编译时将csharp目录下的AssemblyInfo.cs文件的#if (CLR4)定义去掉。

23.等待线程结束可以用Thread.join()方法

24.线程互斥方法有lock,monitor,ManualResetEvent,AutoResetEvent,EventWaitHandle,Semaphore、Mutex等。

ManualResetEvent在一次set()释放后所有等待该信号的线程都继续;AutoResetEvent在一次set()释放后只有一个等待线程继续,需要再次set()才能释放另一个等待线程。

25.Interlocked类提供多线程原子操作。

26.unsafe环境下指针可以直接强转成IntPtr.

  fixed (byte* pSource = source)

  {

     IntPtr p = (IntPtr)pSource;

  }

27.在有些IIS7+IE10上,FormsAuthentication.SetAuthCookie方式可能会无法保存用户凭证。导致登录失败。

28.jquery扩展事件:

$.extend($.fn.layout.methods, {

   isVisible: function (jq, params) {

      var panels = $.data(jq[0], 'layout').panels;

      var pp = panels[params];

      if (!pp) {

          return false;

      }

      if (pp.length) {

          return pp.panel('panel').is(':visible');

      }

      else {

          return false;

      }

   }

});

29.如果没有使用windows事件机制,而在windows事件中出现莫名其妙的错误,怎么都找不出原因;可以看看是不是缺少dll。

30.ajax和后台服务通信时,如果参数太多或字符串太长,会导致超过MaxRequestStringLength,可以尝试改用type:'POST'的方式提交数据,默认是'GET'

31.nuget删除包命令:nuget delete 包ID 包版本 -ApiKey develop2 -Source http://192.168.100.75:8000/  

  安装特定版本的包:nuget  install iTelluro.GlobeEngine -version 2.5.2014.063009 -source http://192.168.100.77/nugetserver/nuget

32. void SwapIfGreater<T>(ref T lhs, ref T rhs) where T : System.IComparable<T> 定义T只能与实现 IComparable<(Of <(T>)>) 的类型参数一起使用。

  where(泛型类型约束)关键字,可以指定模板类型T必须具备某些条件

33.c++获得cpu内核数代码:   SYSTEM_INFO info;

   GetSystemInfo(&info);

   DWORD dwNum = info.dwNumberOfProcessors;

 

34.c#默认函数调用方式是__stdcall,因此被调用的c++ dll中回调函数声明最好也是__stdcall形式,声明语法是typedef int (__stdcall *SearchHitCallback)(int id, void* arg);

  不改c++的回调函数声明的话,也可以在c#委托函数前加约束[UnmanagedFunctionPointer(CallingConvention.Cdecl)]

35.GetNextFeature返回的Feature对象必须显式Dispose,否则会有内存泄露。Dispose后,先前通过GetGeometryRef获取的Geometry指针已被释放,也不可再用。

36.c#中char类型是两个字节,每个char代表一个unicode字符,string类型默认是unicode编码。c++中char类型是一个字节。

37. dllimport c++的dll时,如果c++定义中函数参数类型是向外传值的指针,那么c#定义使用ref即可,例如char* write(int* size); -> IntPtr write(ref int size);

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值