• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • YouClaw
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
猩球崛起
积小成多
博客园    首页    新随笔    联系   管理    订阅  订阅

随笔分类 -  c#

1
c#走出误区。

摘要:昨天看《c# in Depth》,有部分是走出误区。觉得不错,故记之。1.不少人认为引用类型在堆上,值类型在栈上,前半部分是对的,但后半部分就有问题了。假设一个类中有一个int类型的实例变量,那么这个类的任何对象中,该变量的值总是和对象中的其他数据在一起,也就是在堆上。2.对象在c#中默认是通过引用传递的。其实这种说法是错误的,引用类型作为方法参数使用时,参数默认传递是以“值传递”方式来传递的,但值的本身是一个引用。3.为一个类型的值调用ToString,Equals,GetHashCode方法时(这些方法都是来自Object类),如果该类没有重写这些方法则会发生装箱(装箱,拆箱是很影响性能的 阅读全文
posted @ 2013-04-12 22:58 Orangutan 阅读(203) 评论(0) 推荐(0)
C#指针- unsafe与fixed

摘要:c#在默认情况下生成的都是安全代码,即进行了代码托管(.NET的CLR机制好处之一是,进行代码托管,适时的释放内存,程序员便不必考虑资源 的回收问题),而此时,指针不能出现在安全代码的编译条件下。 一、unsafe如果因需要想在c#中使用指针,那么unsafe便是一个通道(当然在使用前,需在项目属性的生成选项中,选择“允许不安全代码”)。example 1:a) 创建项目,项目属性->生成->选择“允许不安全代码”b) 编写代码using System;using System.Collections.Generic;using System.Text;using System.R 阅读全文
posted @ 2013-03-25 18:59 Orangutan 阅读(327) 评论(0) 推荐(0)
C#父类与子类(多态性)

摘要:using System;namespace 父类子类{ class Person { public Person() { Console.WriteLine("我是父类构造函数"); } public virtual void SayHello() { Console.WriteLine("父类SayHello"); } } class Son : Person { public Son() { ... 阅读全文
posted @ 2013-03-23 22:35 Orangutan 阅读(295) 评论(0) 推荐(0)
.Net常见面试题整理(一)——值类型和引用类型

摘要:原文地址:http://www.cnblogs.com/zhangkai2237/archive/2013/03/17/2964528.html类型一直是C#中最基本的问题,关于值类型和引用类型,我想每个C#程序员都知道“值类型保存在栈上,引用类型保存在堆上”。但是仅仅知道到这里是完全不够的,我们需要理解C#中的类型,了解为什么要有值类型和引用类型以及他们的特征。一、值类型和引用类型的概念值类型的实例是在线程栈上分配的(不能免俗的提起这句话),值类型的变量并没有一个指向实例的指针,而是变量中已经包含了实例本身的字段。相应的引用类型的实例时在托管堆中分配的,返回的是一个指向实例对象的内存地址。比 阅读全文
posted @ 2013-03-22 11:59 Orangutan 阅读(262) 评论(0) 推荐(0)
.Net常见面试题整理(二)——装箱和拆箱

摘要:原文链接:http://www.cnblogs.com/zhangkai2237/archive/2013/03/21/2974570.html上一节我们讨论的是值类型和引用类型, 我们知道值类型是一种轻量级的数据结构, 对于一些简单的类型定义为值类型会减少定义成引用类型造成的系统开销以及GC的压力。但是值类型有一个缺点,就是缺少对象指针,我们不能用一个新的变量来引用栈上的值类型(Note:即未装箱的值类型)。也就是说很多引用类型为参数的方法不能传入值类型。为了解决这个问题,CLR提供了装箱和拆箱的机制。一、装箱和拆箱的概念和原理在面试中, 面试官提到装箱和拆箱的问题时,可能很多人想到的第一句 阅读全文
posted @ 2013-03-22 11:55 Orangutan 阅读(285) 评论(0) 推荐(0)
c# 文件拖放进程序获取文件路径

摘要:WPF添加Drop事件Drop="Window_Drop_1"Winform添加DragDrop事件 private void Window_Drop_1(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop)) e.Effects = DragDropEffects.Link; else e.Effects = DragDropEffects.None; ... 阅读全文
posted @ 2013-03-21 13:08 Orangutan 阅读(383) 评论(0) 推荐(0)
sealed,new,virtual,abstract与override

摘要:1.sealed---“断子绝孙”密封类不能被继承,不会有子类。密封方法可以重写基类中的方法。2.new---“你是你的,我是我的”new关键字用于显式隐藏从基类继承的成员,也就是说在使用派生类时调用的方法是new关键字新定义出来的方法,而不是基类的方法。在不使用new修饰符的情况下隐藏成员是允许的,但会生成警告。使用new显式隐藏成员会取消此警告,并使用派生类新定义的方法。即:好比是不用祖宗的东西,而是用自己创造的东西。using System.Text; namespace ConsoleApplication1 { class Program { sta... 阅读全文
posted @ 2013-03-20 23:35 Orangutan 阅读(295) 评论(0) 推荐(0)
private,protected,public和internal的区别

摘要:private是完全私有的,只有在类自己里面可以调用,在类外部和子类都不能调用,子类也不能继承父类的private属性和方法protected虽然可以被外界看到,但外界却不能调用,只有自己及自己的子类可以调用(属性和方法都可以被子类所继承和调用)private和protected的共同点:外部都不可以访问private和protected的区别:在同一类中可以视为一样,继承中可以体现区别private在派生类中不可被访问,而protected可以public:对任何类和成员都完全公开,无限制访问。internal:同一应用程序集内部可以访问该类。protected internal 只能在同一 阅读全文
posted @ 2013-03-20 23:23 Orangutan 阅读(367) 评论(0) 推荐(0)
C# const和readonly的区别

摘要:初始化赋值不同const修饰的常量必须在声明的同时赋值,例如: public class Class1 { public const int MaxValue = 10;//正确声明 public const int maxValue; //错误,常量字段要求提供一个值 public Class1() { maxValue=10; } }readonly字段可以在初始化(声明或构造函数)的过程中赋值。在其他地方不能进行赋值操作。根据所使用的构造函数,readonly可... 阅读全文
posted @ 2013-03-20 22:59 Orangutan 阅读(248) 评论(0) 推荐(0)
C#Equals()和运算符==的区别

摘要:1.对于值类型如果对象的值相等,则相等运算符==返回True,否则返回False2.对于引用类型equals方法比较的是两个对象指向的内存空间内容是不是相同。也就是比较两个引用类型是否是对同一个对象的引用,即两个对象的内容是否相等。对于string类型,==比较字符串的值对于引用类型,==操作符类似于比较的是文件夹的路径是否相同,而equals方法比较的是文件夹中的内容是不是一样。using System; namespace Equals和等号的区别 { class ClassPerson { private string name=null; ... 阅读全文
posted @ 2013-03-20 22:31 Orangutan 阅读(303) 评论(0) 推荐(0)
c#字符串常见操作

摘要:1.字符串转为比特码:byte[] byteStr=System.Text.Encoding.Default.GetBytes(str); 2.字符串相加StringBuilder sb=new StringBuilder(); sb.Append("aa"); sb.Append("bb"); sb.Append("cc"); //和+等效 string str="aa"+"bb"+"cc";3.截取字符串的一部分Substring(起始位置,截取长度);string st 阅读全文
posted @ 2013-03-20 19:53 Orangutan 阅读(262) 评论(0) 推荐(0)
c#区分传值调用 传引用调用。

摘要:先来看一下百度百科是怎样说的:传值调用是指方法在调用参数时,不是对原参数进行操作,而是创建参数的拷贝并对进行操作,这种调用有利于保护数据传引用调用是指传递一个地址的拷贝。在c#中(以下内容转自:http://www.cnblogs.com/wang_yb/archive/2011/05/18/2050574.html):如果传递的参数是基元类型(int,float等)或结构体(struct),那么就是传值调用。如果传递的参数是类(class)那么就是传引用调用。如果传递的参数前有ref或者out关键字,那么就是传引用调用。如果调用的函数中对参数重新进行了地址分配(new操作),那么执行结果类似 阅读全文
posted @ 2013-03-20 17:57 Orangutan 阅读(210) 评论(0) 推荐(0)
c#好的程序员必须掌握的编码习惯

摘要:1.一定要用大括号括住流程控制元素,如for,while,if,switch内嵌的代码,即便只包含一行代码。2.如果语句中有else if,一定要有一个else跟着最后一个else if。3.只要使用switch在所有case后面一定要有default。4.当对字符串进行复杂操作的时候考虑用StringBuilder,StringBuilder可以在实例化的时候制定字符串需要多少空间,这样不需要重复分配内存。5.用static readonly来修饰一个常量而不用const,好处就是牺牲一点点性能的情况下让CLR进行运行时的类型检查。6.在最靠近第一次使用某个变量的地方声明并初始化这个变量而不 阅读全文
posted @ 2013-03-17 15:21 Orangutan 阅读(187) 评论(0) 推荐(0)
C# DataSet和DataTable详解

摘要:C#遍历DataSet中数据的几种方法总结//多表多行多列的情况foreach (DataTable dt in YourDataset.Tables) //遍历所有的datatable { foreach (DataRow dr in dt.Rows) ///遍历所有的行 foreach (DataColumn dc in dt.Columns) //遍历所有的列 Console.WriteLine(“{0}, {1}, {2}”, dt.TableName,dc.ColumnName, dr[dc]); //表名,列名,单元格数据 }//遍历一个表多行多列 foreach(DataRow 阅读全文
posted @ 2013-03-16 13:57 Orangutan 阅读(1026) 评论(0) 推荐(0)
c#序列化及反序列化(三种方式)

摘要:一:BinaryFormatter序列化序列化简单点来理解就是把内存的东西写到硬盘中,当然也可以写到内存中(这个内容我会在后面写一个例子).而反序列化就是从硬盘中把信息读到内存中.就这么简单,呵呵,现在来看下面的例子吧!在这篇文章中我将使用BinaryFormatter序列化类Book作为例子,希望大家能从例子中深刻体会什么是序列化.定义类Book:[Serializable]public class Book{ string name; float price; string author; public Book(string bookname, float bookprice, stri 阅读全文
posted @ 2013-03-15 20:48 Orangutan 阅读(683) 评论(0) 推荐(0)
c# 程序以管理员身份运行

摘要:1.在项目中添加清单文件,如图清单文件默认内容应该是这样的:<?xml version="1.0" encoding="utf-8"?> <asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:as 阅读全文
posted @ 2013-03-10 22:55 Orangutan 阅读(297) 评论(0) 推荐(0)
获取可用驱动器(本地磁盘,光驱,U盘)列表

摘要:GetLogicalDrives()可以实现。具体代码:[StructLayout(LayoutKind.Sequential)] public struct SHFILEINFO { public IntPtr hIcon; public int iIcon; public int dwAttributes; public string szDisplayName; public string szTypeName; } [DllImport("shell32")] private static extern int SHGetF... 阅读全文
posted @ 2013-03-10 16:25 Orangutan 阅读(255) 评论(0) 推荐(0)
获取exe可执行程序文件中的图标

摘要:据我所知可以通过调用API函数ExtractIconEx来实现,但这次是基于c#.net实现的,感觉调用API不是太好。查了一下MSDN。ExtractAssociatedIcon可以返回指定文件中包含的图像的图标表示形式。ofd.FileName是文件的绝对路径。image1是Image控件的名称 Icon icon = System.Drawing.Icon.ExtractAssociatedIcon(ofd.FileName); BitmapSource bs = Imaging.CreateBitmapSourceFromHBitmap(icon.... 阅读全文
posted @ 2013-03-10 10:55 Orangutan 阅读(720) 评论(0) 推荐(0)
c# 通过CreateDC,BitBlt实现截图

摘要:添加对System.Drawing.Imaging命名空间的声明然后添加API函数BitBlt和CreateDC的声明,程序的核心是按钮控件的响应事件。抓取屏幕图像的难点是获取屏幕句柄并基于该句柄后获取屏幕的图像。为此定义一个IntPtr类型的变量dc1,通过IntPtr dc1 = CreateDC("DISPLAY", null, null, (IntPtr)null);获取屏幕的上下文句柄,并使用该句柄创建一个新的Graphics对象g1。然后创建一个Bitmap类型变量MyImage,在实例化过程中将g1作为一个构造参数,这样既可以将屏幕分辨率与MyImage关联。 阅读全文
posted @ 2013-03-09 21:36 Orangutan 阅读(1549) 评论(0) 推荐(0)
C#的6种常用集合类大比拼

摘要:C#的6种常用集合类大比拼作者:清清月儿主页:http://blog.csdn.net/21aspnet/时间:2007.6.27说明:MSDN没有说出几种集合类其间的区别,当然欲知更多细节可参考MSDN。一.先来说说数组的不足(也可以说集合与数组的区别):1.数组是固定大小的,不能伸缩。虽然System.Array.Resize这个泛型方法可以重置数组大小,但是该方法是重新创建新设置大小的数组,用的是旧数组的元素初始化。随后以前的数组就废弃!而集合却是可变长的2.数组要声明元素的类型,集合类的元素类型却是object.3.数组可读可写不能声明只读数组。集合类可以提供ReadOnly方法以只. 阅读全文
posted @ 2013-03-04 22:30 Orangutan 阅读(210) 评论(0) 推荐(0)

1
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3