EasyText, EasyLicense 的作者, https://github.com/EasyHelper Good Good Study,Day Day Up.

 

随笔分类 -  C#

摘要:Main方法如下:static void Main(string[] args){ dynamic str = "abcd"; Console.WriteLine(str.Length); Console.WriteLine(); Console.WriteLine(str.Substring(1)); Console.ReadLine();}运行,结果如下: 使用reflactor 反编译下,可以看到: 完整代码如下:private static void Main(string[] args){ object obj1 = "abcd"; if (P 阅读全文
posted @ 2011-07-07 19:58 LoveJenny 阅读(5185) 评论(7) 推荐(5) 编辑
摘要:接上文:浅谈Dynamic关键字系列之三(上) 为什么TryXXX方法没有被调用?? 将DynamicProduct 中的name修饰符改为private: private string name; 可以在TrySetMember方法中设置断点,再次运行: 为什么访问修饰符是Public不调用TrySetMember,是Private 就调用了呢?? 难道是因为private抛出了异常吗?? 再次看看Msdn对此的TrySetMember方法的解释: Msdn备注 …………….动态语言运行库 (DLR) 将首先使用语言联编程序在类中查找属性的静态定义。 如果没有此类属性,DLR 调用 阅读全文
posted @ 2011-07-06 22:19 LoveJenny 阅读(5160) 评论(4) 推荐(2) 编辑
摘要:昨天在微博上看到有人说: 看看日历,的确是这样: 但是凭程序员的直觉,感觉下一次,应该不需要800年啊,于是做了如下测试: 判断有5个礼拜五,5个礼拜六,5个礼拜天的方法: 1:该月必须有31天 2:该月1号必须是星期5. 阅读全文
posted @ 2011-07-06 05:59 LoveJenny 阅读(28204) 评论(84) 推荐(27) 编辑
摘要:ExpandoObject:表示一个对象,该对象包含可在运行时动态添加和移除的成员。 dynamic dynEO = new ExpandoObject();dynEO.number = 10;dynEO.Increment = new Action(() => { dynEO.number++; });Console.WriteLine(dynEO.number);dynEO.Increment();Console.WriteLine(dynEO.number);dynEO.number 中number是动态添加属性。 dynEO.Increment 中Increment 是动态... 阅读全文
posted @ 2011-07-05 19:22 LoveJenny 阅读(17001) 评论(3) 推荐(9) 编辑
摘要:新建类Product: class Product{ public string name; public int Id { get; set; } public void ShowProduct() { Console.WriteLine("Id={0} ,Name={1}", Id, name); }}Main方法代码如下:static void Main(string[] args){ //dynamic对象 dynamic dynProduct = new Product(); //设置name字段 dynProduct.name = "n1" 阅读全文
posted @ 2011-07-04 19:47 LoveJenny 阅读(5698) 评论(5) 推荐(1) 编辑
摘要:C# 4.0提供了一个dynamic 关键字,那么什么是dynamic,究竟dynamic是如何工作的呢? 从最简单的示例开始: static void Main(string[] args) { dynamic dyn = 1; object obj = 1; //在编译时将鼠标放到 ”dyn” 和”obj”中可以发现: // dyn:局部变量 dynamic (dyn) // obj: 局部变量object (obj) System.Console.WriteLine(dyn.GetType()); System.Console.WriteLine(obj.GetType()); }运行 阅读全文
posted @ 2011-07-04 06:27 LoveJenny 阅读(6779) 评论(19) 推荐(3) 编辑
摘要:有时候你希望在一个嵌套循环的外层循环中执行Continue操作。例如,假设你有一连串的标准,和一堆items。并且你希望找到一个符合每个标准的item。match = null;foreach(var item in items){ foreach(var criterion in criteria) { if (!criterion.IsMetBy(item)) //如果不符合标准 { //那么说明这个item肯定不是要查找的,那么应该在外层循环执行continue操作 } } match = item; break;}有很多方法可以实现这个需求,这里有一些:方法#1(丑陋的goto):使用 阅读全文
posted @ 2011-07-03 08:49 LoveJenny 阅读(2280) 评论(5) 推荐(2) 编辑
摘要:经常看到同事这样写代码:DataSet QueryDB(){ DataSet ds=null; try { //do something } catch (Exception ex) { //这里要做日志记录 } return ds;} 这里有几个问题:1:很明显,如果QueryDB方法发生了任何异常,客户端无法得知,例如客户端调用QueryDB方法,该方法返回了null,那这代表数据库里面没有这个数据呢?还是抛出了异常?2:注释是不应该存在的,它应该被真实的日志记录代码给替代,例如Log.Write(ex);3:该方法捕捉所有异常,这样任何异常都被捕获了,这对于开发很不方便,永远不要捕获你不 阅读全文
posted @ 2011-06-30 06:32 LoveJenny 阅读(3956) 评论(34) 推荐(6) 编辑
摘要:题目在这里:Question:关于C#连续赋值的面试题在msdn中,对=号操作符的说明如下: 赋值运算符 ( =) 将右操作数的值存储在左操作数表示的存储位置、属性或索引器中,并将值作为结果返回。操作数的类型必须相同(即右操作数必须可以隐式转换为左操作数的类型)。首先来看int x,y,z;X = y = z = 1;1:z=1,将1赋值给z,接着返回1,2:y=(z=1),将返回的1赋值给y,并返回1,3:x=(y=(z=1)),将表达式2的结果1赋值给x。接着看第一道题:const int x=1;short y;object z;z=y=x;首先要说明的是x是const,因为const是 阅读全文
posted @ 2011-06-28 19:31 LoveJenny 阅读(2918) 评论(6) 推荐(2) 编辑
摘要:我们知道C#中 a=b=c;是合法的,例如:int i,j,k;i=j=k=1;下面有两道题:1: const int x=1;short y;object z;z=y=x; //请问下面的输出是什么?Console.WriteLine(z.GetType().ToString());2: class C { private string x; public string X { get { re... 阅读全文
posted @ 2011-06-27 19:51 LoveJenny 阅读(2999) 评论(17) 推荐(0) 编辑
摘要:新建Rest服务接口: [ServiceContract]public interface IService1{ [OperationContract] string GetData(int value);}接着新建一个服务实现类:public class Service1 : IService1{ public string GetData(int value) { int i = 0; int j = 5 / i; return string.Format("You entered: {0}", value); }}在这里让Service1 抛出”divided by 阅读全文
posted @ 2011-06-20 19:08 LoveJenny 阅读(3476) 评论(3) 推荐(4) 编辑
摘要:一个属性或方法可以同时被abstract 和override 修饰吗?我的一个同事这样问我。我最初的反应是:“当然不可以”,但是事实上证明的确是可以一起修饰的。 对于这个问题,我认真的思考了下,这种方式虽然少见,但是却是合法的甚至还有点意义。 假设我们有一个非常大的,复杂的类型,让我们叫他”Thingy”: abstract class Thingy{ public virtual string Name { get { return ""; } }}当然Thingy将会被很多子类集成,并且大部分子类都有一个默认的””的Name,或者是null,或者是其他什么的。关键点并 阅读全文
posted @ 2011-06-16 19:21 LoveJenny 阅读(2884) 评论(1) 推荐(1) 编辑
摘要:继上篇:Asp.net,C# 加密解密字符串,有网友提问: 也就是说加密后的数据不再是:N8lAaHMFtSAQgaf3+RUFng== 希望encryptedString是"120387789370480938409832840923492384028934…”;当然上面的数字是我随便乱敲的。那么如何实现纯数字呢??想法很简单,只要将字符变成Ascll 码就可以了。例如a:97, =:61;那么encryptedString 就可以变成 97 81 61 33 44 55 。。。;但是如果合在一起的话就变成了978161334455.问题来了:我怎么知道97是a,而不是9,7 呢? 阅读全文
posted @ 2011-06-15 23:16 LoveJenny 阅读(5836) 评论(15) 推荐(5) 编辑
摘要:首先在web.config | app.config 文件下增加如下代码: <?xml version="1.0"?> <configuration> <appSettings> <add key="IV" value="SuFjcEmp/TE="/> <add key="Key" value="KIPSToILGp6fl+3gXJvMsN4IajizYBBT"/> </appSettings> </configura 阅读全文
posted @ 2011-06-15 06:26 LoveJenny 阅读(6032) 评论(8) 推荐(7) 编辑
摘要:新建SL4 应用程序,在MainPage下添加代码: <Button x:Name="btnThread1" Click="btnThread1_Click">Thread1</Button> 后台代码为: private void btnThread1_Click(object sender, RoutedEventArgs e) { new Thread(() => { MessageBox.Show("Hello World"); }).Start(); }如果你运行程序,点击按钮,会得到下面的异 阅读全文
posted @ 2011-06-14 06:23 LoveJenny 阅读(2732) 评论(4) 推荐(9) 编辑
摘要:1:新建Silverlight4 应用程序,名称为SLStudy。建好后如下: 2:在SLStudy下新建Silverlight用户控件,Print1.xaml作为要打印的控件。 在Print1.xaml里面添加代码为: <Grid x:Name="LayoutRoot" Background="White"> <Button>这是第一个例子,简单的按钮</Button></Grid>3:已经建立好了要打印的内容了,这里打印的是一个按钮。4:修改MainPage.xaml代码如下:<Grid x:N 阅读全文
posted @ 2011-06-13 06:25 LoveJenny 阅读(3960) 评论(6) 推荐(5) 编辑
摘要:经常看到同事写代码: bool? obj=从服务器返回来的值,可能为null。 if(obj !=null && Convert.ToBoolean(obj)==true){ //Do something}上面的代码的意图很明显,先判断obj 是不是null,如果不是null 的话,再调用Convert.ToBoolean方法,判断是不是True。上面的方法没有任何问题,但有一点要确认的是, obj!=null 这句话需要判断吗?于是笔者写了下面的代码来对Convert的ToXXX方法传递null值进行测试。 可以看到,method.Invoke(null,new object 阅读全文
posted @ 2011-06-11 22:46 LoveJenny 阅读(3183) 评论(24) 推荐(2) 编辑
摘要:线程安全的一个很经常的需求是允许并发读,但是不允许并发写,例如对于文件就是这样的。ReaderWriterLockSlim 在.net framework 3.5的时候就提供了,它是用来代替以前的”fat”版本的”ReaderWriterLock”这两个类,有两种基本的锁----一个读锁,一个写锁。写锁是一个完全排他锁。读锁可以和其他的读锁兼容因此当一个线程持有写锁的是很,所有的尝试获取读锁和写锁的线程全部阻塞,但是如果没有一个线程持有写锁,那么可以有一系列的线程并发的获取读锁。ReaderWriterLockSlim 定义了下面几个方法来获取和释放 读写锁。Public void Enter 阅读全文
posted @ 2011-06-07 06:32 LoveJenny 阅读(3817) 评论(6) 推荐(3) 编辑
摘要:在上篇文章中我们使用了Wait和Pulse 实现了Countdown 接下来我们可以使用刚刚写的Countdown 类来实现两个线程的交会。 classRendezvous{staticobject_locker=newobject();staticCountdown_countdown=newCountdown(2);publicstaticvoidMainThread(){Randomr=newRandom();newThread(Mate).Start(r.Next(1000));Thread.Sleep(r.Next(10000));//主线程睡眠一段时间_countdown.Sing 阅读全文
posted @ 2011-06-05 08:22 LoveJenny 阅读(2316) 评论(1) 推荐(4) 编辑
摘要:你可能在上篇文章中深入浅出多线程系列之十二:双向信号和竞赛 注意到了这个模式:两个Waiting 循环都要下面的构造:lock(_locker){while(!_flag)Monitor.Wait(_locker);_flag=false;}在这里_flag被另一线程设置为true。这是,从作用上讲,这里在模仿AutoResetEvent。如果我们将 _flag = false;去掉,那么我们就得到了一个基本的ManualResetEvent.让我们使用Wait和Pulse来为ManualResetEvent完成剩余的代码吧。 readonlyobject_locker=newobject() 阅读全文
posted @ 2011-06-03 06:34 LoveJenny 阅读(2485) 评论(4) 推荐(2) 编辑

EasyText, EasyLicense 的作者, https://github.com/EasyHelper Good Good Study,Day Day Up.