![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C#
文章平均质量分 52
名叫猫的鱼
这个作者很懒,什么都没留下…
展开
-
C#学习 - Net Framework,Net Core 和 Net Standard 区别
Net Framework,Net Core 和 Net Standard 区别原文链接:Net Framework,Net Core 和 Net Standard 区别 - 乐途 - 博客园 (cnblogs.com)转载 2021-03-24 10:46:06 · 260 阅读 · 0 评论 -
C#学习 - CsvHelper
CsvHelper可以方便的处理Csv文件, CsvHelper可以从NuGet上下载用法示例1: var table = new DataTable(); var csvFile = Directory.GetCurrentDirectory() + @"\test.csv"; Dictionary<string, Type> TypeMappings = new Dictionary<strin...原创 2020-10-29 16:21:18 · 2680 阅读 · 1 评论 -
C#学习 - Where 和 TakeWhile的区别
TakeWhile:stop until the condition is false, the remaining elements are skippedWhere:continues and find all elements matching the condition举例说明: var intList = new int[] { 1, 2, 3, 4, 5, -1, -2 }; Console.WriteLine("Where");..原创 2020-10-29 16:04:49 · 1095 阅读 · 0 评论 -
C#对象的初始化顺序
当构造一个c#对象时,理解对象的字段和构造函数的顺序是非常重要的:Derived static fields//派生类静态字段 Derived static constructor//派生来静态构造函数 Derived instance fields//派生类实例字段 Base static fields//基类静态字段 Base static constructor//基类静态构造函数 Base instance fields//基类实例字段 Base instance construct转载 2020-07-21 11:40:58 · 329 阅读 · 0 评论 -
C# 学习 - & 和 && 的区别
逻辑 AND 运算符 &&运算符计算操作数的逻辑与。如果x和y的计算结果都为true,则x & y的结果为true。否则,结果为false。即使左侧操作数计算结果为false,&运算符也会计算这两个操作数,而在这种情况下,无论右侧操作数的值为何,运算结果都为false。条件逻辑 AND 运算符 &&条件逻辑与运算符&&(亦称为“短路”逻辑与运算符)计算操作数的逻辑与。如果x和y的计...原创 2020-07-03 13:00:55 · 638 阅读 · 0 评论 -
C#学习 - 关于Thread.Yield()和Thread.Sleep()
1. Thread.Yield()该方法是在 .Net 4.0 中推出的新方法,它对应的底层方法是 SwitchToThread。Yield 的中文翻译为 “屈服,让步”,这里意思是主动放弃当前线程的时间片,并让操作系统调度其它就绪态的线程使用一个时间片。但是如果调用 Yield,只是把当前线程放入到就绪队列中,而不是阻塞队列。如果没有找到其它就绪态的线程,则当前线程继续运行。Yield可以让低于...原创 2018-06-06 10:40:02 · 4133 阅读 · 0 评论 -
C#学习 - 关于AutoResetEvent和ManualResetEvent
在.Net多线程编程中,AutoResetEvent 和 ManualResetEvent 这两个类经常用到,他们的用法很类似,但也有区别。Set方法将信号置为发送状态,Reset()方法将信号置为不发送状态,WaitOne()等待信号的发送。可以通过构造函数的参数值来决定其初始状态,若为true则非阻塞状态,为false为阻塞状态。如果某个线程调用WaitOne()方法,则当信号处于发送状态时,...原创 2018-06-05 17:34:55 · 372 阅读 · 0 评论 -
C#学习 - 关于Nullable
1. Nullable<T>和T?可以为 null 的类型可表示一个基础类型的所有值,还可以再表示一个 null 值。 可通过以下两种方式之一声明可为 null 的类型:Nullable<T> variable 或 T? variable(c#的语法糖衣)。例如:Nullable<int> a 与 int? a 等效,都表示声明一个可以为空值的整型变量a。2...原创 2018-06-05 11:46:06 · 161 阅读 · 0 评论 -
C#学习 - 关于Interlocked.CompareExchange()的用法
Interlocked.CompareExchange有一组函数 名称说明CompareExchange(Double, Double, Double)比较两个双精度浮点数是否相等,如果相等,则替换第一个值。CompareExchange(Int32, Int32, Int32)比较两个 32 位有符号整数是否相等,如果相等,则替换第一个值。CompareExchange(Int64, Int64...原创 2018-05-28 17:50:01 · 14206 阅读 · 0 评论 -
C#学习- 关于lock,mutex和semephore
C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。每个线程都有自己的资源,但是代码区是共享的,即每个线程都可以执行相同的函数。这可能带来的问题就是几个线程同时执行一个函数,导致数据的混乱,产生不可预料的结果,因此我们必须避免这种情况的发生。lock是一种比较简单的线程同步方式,它是通过为给定...原创 2018-06-04 11:20:57 · 2978 阅读 · 0 评论 -
C#学习 - 如何自动删除应用程序创建的临时文件
直接上代码using System;using System.IO;sealed class TempFile : IDisposable{ string path; public TempFile() : this(System.IO.Path.GetTempFileName()) { } public TempFile(string path) { ...原创 2018-05-31 10:16:54 · 2411 阅读 · 0 评论 -
C#学习 - 关于析构函数,Dispose,和Close
转自 https://blog.csdn.net/lianchangshuai/article/details/9501781C# 中的析构函数实际上是重写了 SystemFinalize.Object 中的虚方法 Finalize三种最常的方法如下: 1. 析构函数;(由GC调用,不确定什么时候会调用) 2. 继承IDisposable接口,实现Dispose方法;(可以手动调用。比如数据库...转载 2018-05-31 10:40:48 · 1043 阅读 · 0 评论 -
C#学习 - 关于懒汉式和饿汉式单例
1. Eager Singleton(饿汉式单例类),其静态成员在类加载时就被初始化,此时类的私有构造函数被调用,单例类的唯一实例就被创建。 class EagerSingleton { private static EagerSingleton instance = new EagerSingleton(); pri...原创 2018-06-22 15:35:05 · 1122 阅读 · 0 评论 -
C#学习 - LINQ使用
下面的代码通过反射获取Server类下所有方法,并将带有InterceptAttribute的方法及其Intercept属性保存在Dictionary中。 Assembly ass = Assembly.GetAssembly(typeof(Server)); Type t = ass.GetType("MyServer.Server"); ...原创 2018-07-05 13:59:16 · 253 阅读 · 0 评论 -
C#学习 - 接口和实现用不同DLL的意义
为了保证实现部分代码的变化不需要重新编译应用程序,一种可以采用的方法是:将设计的library分为2个dll,1. 一部分为公共接口dll,这个dll被外部应用工程引用。2. 另一部分为接口的实现部分。在第一部分项目中,实现工厂类,并采用动态加载的方式将第二部分的dll加载并实例化。用这个方法,如果某应用需要调用library,只需要引用第一个dll,即接口dll。而接口实现的...原创 2018-08-09 15:20:17 · 1301 阅读 · 0 评论 -
C#学习 - .Net调用C++写的DLL库
1. Create a C++ Win32 Console Application2. 在新建的工程中添加头文件CppDll.h,内容如下#pragma once#ifdef CPPDLL_EXPORTS #define CPPDLL_EXPORTS __declspec(dllexport) #else #define CPPDLL_EXPORTS __dec...原创 2018-09-12 10:58:28 · 4725 阅读 · 0 评论 -
用VS自带的dumpbin.exe工具查看DLL
从程序菜单启动 Developer Command Prompt for VS2015运行dumpbin可以开到帮助文档常用: dumpbin /exports <dllFile>原创 2018-11-21 17:38:42 · 1693 阅读 · 1 评论 -
C#学习- 用FTP(FtpWebRequest/FtpWebResponse)传输文件
废话不说,直接上代码,一目了然 class FtpClient { private string host = null; private string user = null; private string pass = null; private FtpWebRequest ftpRequest = null; ...原创 2018-05-25 11:48:14 · 11036 阅读 · 1 评论 -
C#学习 - XML Serialization
将一个对象序列化到XML文件[Serializable]public class SomeClass{ public int Field1 { get; set; } public string Field2 { get; set;}}...string xmlFileName = @"c:\temp\1.xml";var obj = new SomeClass();Xml...原创 2018-04-25 10:08:36 · 667 阅读 · 0 评论 -
C#学习 - 关于XML文件的读写
直接上代码说明Xml读写1. 写Xml XmlDocument myXml = new XmlDocument(); XmlNode docNode = myXml.CreateXmlDeclaration("1.0", "UTF-8", null); myXml.AppendChild(docNode); ...原创 2018-04-13 11:50:26 · 232 阅读 · 0 评论 -
C#学习 - 关于this的几种用法
C#中,this 关键字的几种用法1. 用this来区分参数和成员名 public class Person { public enum SEX { MALE, FEMALE }; public string Name { get; set; } public SEX Sex { get; set...原创 2018-03-15 10:38:46 · 578 阅读 · 0 评论 -
C#学习 - 关于Single()
Single()严格返回一个元素项。如果返回的元素集合为空,或是返回的元素集合多于一个,Single()就会抛出异常。当程序需要严格要求返回一个元素时,不妨尝试用用Single()。举例说明: public class Person { public string FirstName { get; set; } public string LastNa...原创 2018-03-15 10:59:25 · 6911 阅读 · 1 评论 -
C#学习 - 通过App.Config定义应用程序配置参数
参考:C#的配置文件App.config使用总结原创 2018-03-19 11:37:25 · 1632 阅读 · 0 评论 -
C#学习 - 函数参数什么时候需要用ref关键字
提一个问题,函数中有一个Dictionary<string, string>类型的参数,函数中会增加或修改Dictionary中的内容,那么参数中要使用ref关键字么?答案是:不需要!除非你要改变该参数所引用的Dictionary!看一个例子就明白了:void Method1(Dictionary<string, string> dict) { dict["a"] ...原创 2018-03-23 10:27:32 · 1965 阅读 · 0 评论 -
C#学习 - double 和 decimal 的差异
参考:李江的日志- 网易博客参考: C#中对于float,double,decimal的误解原创 2018-03-14 10:29:24 · 1643 阅读 · 0 评论 -
C#学习 - 扩展方法 extension method
参考:C#扩展方法 扩你所需参考:微软文档原创 2018-03-12 12:35:59 · 673 阅读 · 0 评论 -
C#学习 - 关于协变(co-varianct)和抗变(contra-variant)
微软文档 Covariance and Contravariance (C#)微软文档 Covariance and Contravariance in Generics微软文档 Covariance and Contravariance FAQ原创 2018-03-14 12:19:28 · 472 阅读 · 0 评论 -
C#学习 - 关于yield
参考:C#关键字之yield(迭代器)参考:What is the yield keyword used for in C#?原创 2018-03-14 15:07:57 · 161 阅读 · 0 评论 -
C#学习 - IComparer<T> 和 IComparable<T>的区别
IComparer<T> is implemented by types that are capable of comparing 2 different values, whereas an instance of IComparable<T> is capable of comparing _itself_ with another value.例如 p...原创 2018-03-14 16:14:59 · 392 阅读 · 0 评论 -
C#学习 - 关于ArraySegment<T>
注意:ArraySegment<T> reference to the original array and does NOT make a copy of it, so the changes of segment will affect the array as well.例如: var array = new int[] { 5, 8, 9, 20, 70,...原创 2018-03-14 16:20:35 · 514 阅读 · 0 评论 -
C#学习 - 用Lambda表达式来构造一个递归函数
Lambda表达式来构造一个递归函数”的难点是因为“我们正在构造的东西是没有名字的”,因此“我们无法调用自身”。那么,如果我们换种写法,把我们正在调用的匿名函数作为参数传给自己,那么就可以在匿名函数的方法体中,通过调用参数来调用自身了。下面举例说明用Lambda实现斐波那契第一种方法:声明一个delegate /// <summary> /// 在这里声明...原创 2018-03-14 16:32:33 · 1478 阅读 · 0 评论 -
C#学习 - 关于Task的几种用法
1. 使用Task Factory创建 var tf = new TaskFactory(); var t1 = tf.StartNew(TaskMethod, "using a task factory"); 2. 使用new Task() var t3 = new Task(TaskMethod, "using task con...原创 2018-03-30 22:59:37 · 10125 阅读 · 0 评论 -
C#学习 - 关于async和await
参考:使用 Async 和 Await 的异步编程 (C#)原创 2018-03-22 10:24:36 · 200 阅读 · 0 评论 -
C#学习 - 编程指南
C# 编程指南 ( C# Programing Guide )C# 编码约定 ( C# Coding Convensions )原创 2018-03-22 11:13:00 · 1748 阅读 · 0 评论 -
C#学习 - 关于反射
什么是反射?我的理解就是在运行时获取类型的元数据。1. 动态加载AssemblyAssembly ass = Assembly.LoadFrom(dllName);2. 通过反射获取加载的Assembly中定义的类型Type[] types = ass.GetTypes();3. 通过反射获取类型中的属性PropertyInfoPropertyInfo[] p = types[i].GetPro...原创 2018-04-12 23:30:17 · 120 阅读 · 0 评论