C#从零开始
文章平均质量分 86
BigLazyET
这个作者很懒,什么都没留下…
展开
-
DateTime,DateTimeOffset,Timestamp备忘
1. 测试一代码static void Main(string[] args){ var now_timestamp = DateTimeOffset.Now.ToUnixTimeSeconds(); var utc_now_timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds(); if (now_timestamp == utc_now_timestamp) Console.WriteLine("always equals"原创 2020-05-27 11:44:53 · 751 阅读 · 1 评论 -
C#杂记
out使用陷阱using System;using System.Collections.Generic;namespace BasicTest{ class Program { static void Main(string[] args) { Dictionary<string, string> f...原创 2018-04-28 16:56:35 · 322 阅读 · 0 评论 -
常用实用类封装
单例 /// <summary> /// 封装单例类 /// </summary> /// <typeparam name="T"></typeparam> internal class Singleton<T> where T : class, new() { pri...原创 2018-04-27 14:25:28 · 247 阅读 · 0 评论 -
单继承,聚合和Sealed密封(C#)
C#是单继承语言在需要多继承类结构时,一种解决方法是利用聚合:将希望的"基类"作为派生类的一个字段添加,然后将相关属性委托为聚合类的属性。密封类,关键词是Sealed字面意思就是将类密封起来,不让它派生出其他类,在需要把类设计为密封类的时候,将类标记为Sealed即可。原创 2016-03-11 16:13:30 · 1030 阅读 · 0 评论 -
继承和Protected修饰符(C#)
继承:1.基类中受保护成员只能从基类及其派生类中访问2.实例化派生类时,会首先调用基类的构造器,避免遗忘对基类的构造器3.基类如果没有可访问的构造器,编译器就不清楚如何构造基类,进而报错4.避免出现这个问题,在派生类构造器的头部要显式指定要运行哪一个基类构造器原创 2016-03-09 21:31:25 · 2321 阅读 · 0 评论 -
继承与嵌套类(C#)
嵌套类存在的理由:一个类在它包容类外部没有多大意义的时候,设计成嵌套类更为妥当一些。嵌套类的特点:1.由于它只与包容类产生关系,所以应该需要防止从包容类外部访问它。那么当类是嵌套类的时候,要使用private访问修饰符来修饰嵌套类,这样就可以限定嵌套类的作用域了。2.嵌套类能访问包容类的所有成员,包括私有成员。3.包容类不能访问嵌套类的私有成员。4.一般情况下,尽量避免使用public修饰嵌套类。原创 2016-03-09 16:02:25 · 2998 阅读 · 0 评论 -
可选参数 和 TryParse用法(C#)
可选参数有一些注意点:1.可选参数一定程度上解脱了一些情况下必须重载的需求。2.可选参数一定要放在所有的参数最后。3.可选参数可以有多个,但都必须排列放在所有参数的最后。4.方法的所有参数都可以是可选参数5.可选参数的默认值必须是常量(即必须在编译时确定的值)原创 2016-03-08 11:41:57 · 2778 阅读 · 1 评论 -
命名参数(C#)
命名参数,调用者可以显式为一个参数赋值。命名参数打破了只能依据参数顺序决定哪个值赋给哪个参数的限制。利用命名参数,再结合可选参数,参数的个数和顺序都可以随意根据实际要求进行控制。原创 2016-03-08 16:55:51 · 741 阅读 · 0 评论 -
构造器(C#)
一个东西的出现自然是有原因的,就像构造器一样。那为什么会有构造器呢?首先,类都有默认的构造器,不管你是否显示定义。当我们要读取或赋值类中的属性时,需要先用new操作符实例化一个类的对象,然后再进行操作。假如这么一个情况:你实例化类的对象之后,忘了给字段赋值了,而字段恰好没在声明时进行赋值,那么实例化的对象并没有了实质的意义,因为里面是无效的字段,字段并没有值。一旦这种情况发生的多了原创 2016-03-07 16:22:02 · 1337 阅读 · 0 评论 -
C#特殊的技巧(C#)
1.重构代码需做到简洁,那么就需要将相关的一组语句转移,而不要把它放到一个大的方法中从而形成一个臃肿的方法块,对后期维护也会增加负担。这个时候我们自然而然做的事情就是重构。在VS中,选定要转移的语句,右击弹出菜单选择“快速操作”,当然你也可以直接快捷键Ctrl+.即可2.Using指令的自由性Using可以是来引用命名空间的,然而我们是否就这样思维定势地认为Usin原创 2015-11-03 22:14:20 · 3523 阅读 · 0 评论 -
静态Static(C#)
静态可以修饰字段,属性,方法,构造函数,类。1.静态字段(与之相对的是实例字段,也可以成为非静态字段)C#中没有全局变量和全局函数的说法,如果找相之于等价的就可以认为是静态字段和静态方法了。类中声明静态字段,那么类的所有实例都共享这个字段,这对于一些用于计数的字段再好不过,同时可以减少内存的消耗。因为静态字段被类的所有实例所共享,那么一般定位为Public。同时在声明是可以初始原创 2015-11-10 23:19:32 · 3411 阅读 · 0 评论 -
字段和属性(C#)
类成员默认为私有成员。如果不为类成员添加访问修饰符,那么默认的是private。公共成员需要显式指定。字段和属性是不同的两个概念:字段是类中实打实的一种变量。用来存储与对象相关联的数据。所以当字段规定为public时,在当前类之外其他类中随时随地访问和修改字段值(只要定义好当前类的实例即可,除static外),也就是类中所有的细节都能看的很清楚。这符合封装的思想,但却不原创 2016-03-05 17:13:56 · 2030 阅读 · 0 评论 -
out输出参数(C#)
很多情况下,被调用方法获得变量实参之后,很大程度上需要对此变量先进行读取。所以在我们将参数传递给调用方法前必须先变量进行赋值。但是否存在这么一种情况,被调用方法不需要预先读取变量值,而是只需要对其进行写入。所以这个时候最安全的做法是以传引用的方式传入未初始化的局部变量。基于上述安全性的考虑,再者只对变量进行写入自然需要输出最终写入的变量值才能让此操作有意义。我们只需要用out关键词来修饰此参数变量即可。这样做的好处另一方面是可以打破方法只有一个返回值类型的限制,能让方法返回既定类型的值之外,额外会在原创 2016-03-04 23:44:53 · 3315 阅读 · 0 评论 -
值参数与引用参数(C#)
C#参数默认是传值的。如果参数是值类型,那么调用方法获得的实参是值的副本,这样在被调用的方法中更改实参值怎么也影响不到调用者的原始变量值。而如果参数是Ref引用类型,那么实参是有ref前缀的变量(不是值),这种情况下对其进行重新赋值就更改了原始变量值(更改了引用[地址]所指向的数据)。概括的说,我们能更改带有ref前缀的变量的原始值,不带ref前缀的变量更改不了原始值。原创 2016-03-04 15:48:27 · 1156 阅读 · 0 评论