摘要:
class Program { static void Main() { StringBuilder sb = new StringBuilder(); IFormatProvider f=new BoldInt(); BoldInt b = new BoldInt(); sb.AppendFormat(f, "{0} {1} {2:M}", "Xiaobai", 21, DateTime.Now); Console.WriteLine(s... 阅读全文
摘要:
class Fax { } class LaserPrinter : Fax { } delegate Tresult Func<in T,out Tresult>(T arg);//out关键字指定该类型参数是协变的,in关键字指定该类型参数是逆变的 class Program { private static T Min<T>(T o, T b)where T:class,IComparable<T> { Func<Fax, LaserPrinter> l = teee; ... 阅读全文
摘要:
在学习和使用OO设计的时候,我们应该明白:OO的出现使得软件工程师们能够用更接近真实世界的方法描述软件系统。然而,软件毕竟是建立在抽象层次上的东西,再怎么接近真实,也不能替代真实或被真实替代。OO设计的五大原则之间并不是相互孤立的。彼此间存在着一定关联,一个可以是另一个原则的加强或是基础。违反其中的某一个,可能同时违反了其余的原则。因此应该把这些原则融会贯通,牢记在心!OO的五大原则是指SRP、OCP、LSP、DIP、ISP。1. SRP(Single Responsibility Principle 单一职责原则)单一职责很容易理解,也很容易实现。所谓单一职责,就是一个设计元素只做一件事。什 阅读全文
摘要:
.Net Framework中委托和事件的编码规范:委托类型的名称都应该以EventHandler结束。委托的原型定义:有一个void返回值,并接受两个输入参数:一个Object 类型,一个 EventArgs类型(或继承自EventArgs)。事件的命名为 委托去掉 EventHandler之后剩余的部分。继承自EventArgs的类型应该以EventArgs结尾。 class Fax { public Fax(MailManager m) { //构造委托的实力,引用SendFax回调方法 //向Mail... 阅读全文
摘要:
无参属性大家可以参考比对下。今天又翻了翻书,看看有参属性(索引器)跟无参属性有啥区别。属性的get访问器方法不接受参数,所以我们将这些属性称为无参属性,因为无参属性与字段的访问有些相似,所以这些属性很容易理解。除了这些与字段访问有些相似的属性,C#还支持有参属性(索引器),它的get访问器方法接受一个或多个参数,set访问器方法接受两个或多个参数。C#使用数组风格的语法来公开有参属性,可以把索引器看作C#重载[]操作符的一种方式。 class test { private int[] nums; private int length; pu... 阅读全文
摘要:
public enum ee { Success, Fail, } class Program { static void Main() { Console.WriteLine(typeof(string).IsPrimitive);//false Console.WriteLine(typeof(ee).IsValueType);//true Console.ReadKey(); } } 阅读全文
摘要:
大家来讨论下C#无参属性这个东西到底有没有存在的必要?永远不要公开类型的字段,面向对象设计和编程的重要原则之一就是 数据封装。如果公开类型的字段,会很容易的写出不恰当使用字段的代码。这里可以把字段声明为private,然后声明访问器方法。 class test { private string Name; public void SetName(string value) { Name = value; } public string GetName() { ... 阅读全文
摘要:
static void Main() { Console.WriteLine(test(1));//第一个参数是我们传递的,第二个参数使用默认的 Console.WriteLine(test(2,"operators"));//两个参数都是我们自己定义的了 Console.WriteLine(Params("qq"));//第二个参数传递的是 new int[0]; Console.WriteLine(Params("qq", null));//与上面的是同样的效果,但是这样更... 阅读全文
摘要:
static void Main() { System.Data.DataTable dt = new System.Data.DataTable("t"); dt.Columns.AddRange(new DataColumn[] {new DataColumn("id"),new DataColumn("name"),new DataColumn("adress")}); for (int i = 0; i < 10; i++) { dt.Rows.A... 阅读全文
摘要:
在Dynamic关键字中有童鞋提到DynamicObject了,所以就翻翻书,股沟学习下,然后做个笔记,方便以后学习使用,跟大家分享下这些基本的东西吧。。1.ExpandoObject 表示一个对象,该对象包含可在运行时动态添加和移除的成员。,这个类是在System.Dynamic这个命名空间下,那么肯定跟动态类型有关,这个类能做什么呢?我们看一下下面的例子: class Program { static void Main() { dynamic dynEO = new ExpandoObject(); dy... 阅读全文