标签 c# 下的文章

C#中接口(interface)和抽象类(abstract class)的区别

对面型对象理解总觉得不够深入,这里记录一下:

接口(interface)

  • 接口是无状态的
  • 接口一般只有成员方法,一般无成员变量,属性,虽然也可以有,但基本上不这样做
  • 接口中不能包含实现代码,子类中必须对接口方法进行实现
  • 接口可以被多个类继承实现

抽象类(abstract class)

  • 抽象类是可以有状态的
  • 抽象类除了可以有抽象方法外,还可以有成员变量、属性,也可以有非抽象方法
  • 抽象类中可以有自己的非抽象接口实现,子类可以复用
  • 抽象类不能被多继承,一个类只能继承一个父类
  • 抽象类中的抽象方法在子类中也可以是抽象的,直到最后有个子类的实现即可

参考

stackoverflow

C#动态修改connectionString

使用Entity Framework方式连接数据库时,处于安全性考虑,会把App.config里面的connectionString放到配置中心或者加密。加密是为了不暴露数据库连接信息,而放到配置中心好处则更加明显,如果出现集群部署,只需要在配置中心设置一次,便能在所有服务器中生效,大大节省了维护时间。有时候,当数据库出现故障,需要手工切换数据库时,就需要在不重启程序的情况下,更改连接字符串。本篇就来谈谈C#如何在程序中动态的修改connectionString.

- 阅读剩余部分 -

C#扩展方法

扩展方法可以让你在不对原有类型进行修改、继承和重新编译的条件下,添加一些额外功能。扩展方法是一种特定类型的静态方法,但可以通过原始类型的实例进行调用。通过C#实现的扩展方法在使用方法上跟原始类型的真实定义的方法没有不同。

因此上述特性很适合在对一些类库进行二开时使用,如笔者就是通过项目中发现对newtonsoft.json.dll进行扩展才了解到这个知识点的。可见多读项目代码还是多少有用的!

最常用的扩展方法要数对于System.Collections.IEnumerable和System.Collections.Generic.IEumerable<T>类型添加LINQ查询操作。要使用标准的LINQ查询方法,只要引入System.Linq命名空间,然后在任何实现IEnumerable<T>接口的类型实例中都可以使用GroupBy, OrderBy, Average等方法,如List<T>和Array。

- 阅读剩余部分 -

带转换的继承类的JSON序列化

本文只是一个简单的知识点,撰文起因是之前在项目中用到内部类的JSON序列化有问题,后来发现是自己写法错误。这里权当一个记录吧。

在通过继承方式实现语言的多态性时,对有转换和替换关系的基类、子类对象进行JSON的序列化和反序列化,需要设置JsonSerializerSettings中的类型名称TypeNameHandling枚举才能生效。

- 阅读剩余部分 -

C#随机数生成函数Random介绍

生成随机数在很多编程环境中都需要用到,这个看似简单的操作却很容易发生问题,当你在网上搜索时很快就会发现很多同行有相同的经历。

本文将介绍C#中随机数生成函数Random()原理及使用。

- 阅读剩余部分 -