知识点03

C#

集合

  • 集合命名空间:

    • using System.Collections;(非泛型集合)
    • using System.Collections.Generic;(泛型集合)
  • 常用集合

    • “类似数组”集合:ArrayList、List

    • “键值对”集合(“哈希表”集合):Hashtable、Dictionary

    • “堆栈”集合:Stack、Stack(LIFO)Last In First Out

    • “队列”集合:Queue、Queue(FIFO)First In First Out

知识点02

C#

属性的本质是字段+方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
namespace ClassLibrary1
{
public class Person
{
public string Name { get; set; }
}
}

namespace ClassLibrary1
{
using System;
using System.Diagnostics;
using System.Runtime.CompilerServices;

public class Person
{
[CompilerGenerated, DebuggerBrowsable(DebuggerBrowsableState.Never)]
private string <Name>k__BackingField;

public string Name { get; set; }
}
}

索引器的本质是名为Item的属性,并且索引器可以重载,不能再写一个名为item的属性

知识点01

C#

事件event

C# 中的委托是什么?事件是不是一种委托?事件和委托的关系。
委托可以把一个方法作为参数代入另一个方法。
委托可以理解为指向一个函数的指针。
委托和事件没有可比性,因为委托是类型,事件是对象,下面说的是委托的对象(用委托方式实现的事件)和(标准的 event 方式实现)事件的区别。事件的内部是用委托实现的。因为对于事件来讲,外部只能“注册自己+=、注销自己-=”,外界不可以注销其他的注册者外界不可以主动调用事件,因此如果用 Delegate 就没法进行上面的控制,因此诞生了事件这种语法。事件是用来阉割委托实例的,类比用一个自定义类阉割 List。事件只能 add、remove自己,不能赋值。事件只能+=、-=,不能= 。事件内部就是一个 private的委托和 add、remove 两个方法

CSharp高效编程摘记

C#

查询语法(query syntax)的一个用处

循环创建集合|数组时,用查询语法(query syntax)会比普通控制流程的结构好点,

主要体现在:

  • 命令式的版本有时非常难以理解,要是没有注释或文档,后续维护人员将要重读整段代码才能进行开发。
  • 另外,查询语法比循环结构能提供更具组合性的API。查询语法将很自然的把代码分解成小块代码,每一块仅仅对序列中元素进行单一的操作。查询语法的延迟执行模型也让开发者能将这些单一的操作组合成多步操作,且在一次遍历序列时完整执行。

多线程01

C#

进程线程应用程序域概念

进程,线程略

应用程序域(AppDomain):它提供安全而通用的处理单元,公共语言运行库可使用它来提供应用程序之间的隔离。您可以在具有同等隔离级别(存在于单独的进程中)的单个进程中运行几个应用程序域,而不会造成进程间调用或进程间切换等方面的额外开销。优势: 在一个应用程序中出现的错误不会影响其他应用程序。能够在不停止整个进程的情况下停止单个应用程序。应用程序域形成了托管代码的隔离、卸载和安全边界。在任意给定时间,每一线程都在一个应用程序域中执行。

CSharp中的集合接口,类之间的关系

C#

今天看到了一句话
the Where() LINQ extension method is used to filter for a particular set of URLs. Where(), like most LINQ methods, returns an IEnumerable value
让我好奇IEnumerable Icollection Ilist list之间到底是什么关系
顺带IEnumerable可以直接调用ToList变成list

三层02

C#

ado.net使用事务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
string constr = "";
using (SqlConnection con = new SqlConnection(constr))
{
con.Open();
using (SqlTransaction tran = con.BeginTransaction())
{
using (SqlCommand cmd = new SqlCommand("sql", con))
{
cmd.Transaction = tran;
cmd.ExecuteNonQuery();
cmd.CommandText = "sql";
cmd.Parameters.Clear();
cmd.Parameters.AddRange(null);
cmd.ExecuteNonQuery();
}
//tran.Commit();无异常提交
tran.Rollback();//异常回滚
}

}

autofac依赖注入

C#

C# Asp.net autofac依赖注入

service类创建实体,接口,具体实现类

1
2
3
4
5
6
7
8
9
10
11
public class Product
{
public int ProductID { get; set; }

public string Name { get; set; }

public string Description { get; set; }

public decimal Price { get; set; }

}

三层01

C#

SqlHelper实现

  1. 往app.config中添加connectionstrings
1
2
3
<connectionStrings>
<add name="constr" connectionString="data source=”LUOX78“的WIN;initial catalog=school;integrated security=true"/>
</connectionStrings>
  1. 创建SqlHelper类