惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Privacy & Cybersecurity Law Blog
V
V2EX
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The Register - Security
The Register - Security
MongoDB | Blog
MongoDB | Blog
P
Privacy International News Feed
The Last Watchdog
The Last Watchdog
Security Archives - TechRepublic
Security Archives - TechRepublic
美团技术团队
Stack Overflow Blog
Stack Overflow Blog
博客园 - 司徒正美
博客园 - 三生石上(FineUI控件)
V
Visual Studio Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
K
Kaspersky official blog
S
Secure Thoughts
T
Tenable Blog
Security Latest
Security Latest
The Cloudflare Blog
S
Security @ Cisco Blogs
H
Heimdal Security Blog
aimingoo的专栏
aimingoo的专栏
TaoSecurity Blog
TaoSecurity Blog
Blog — PlanetScale
Blog — PlanetScale
Microsoft Security Blog
Microsoft Security Blog
Schneier on Security
Schneier on Security
Webroot Blog
Webroot Blog
G
Google Developers Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Scott Helme
Scott Helme
IT之家
IT之家
Latest news
Latest news
The Hacker News
The Hacker News
C
Check Point Blog
T
The Exploit Database - CXSecurity.com
H
Hackread – Cybersecurity News, Data Breaches, AI and More
腾讯CDC
C
CERT Recently Published Vulnerability Notes
NISL@THU
NISL@THU
N
News | PayPal Newsroom
Forbes - Security
Forbes - Security
P
Palo Alto Networks Blog
S
Security Affairs
S
Securelist
Google Online Security Blog
Google Online Security Blog
WordPress大学
WordPress大学
Last Week in AI
Last Week in AI
C
Cybersecurity and Infrastructure Security Agency CISA
A
About on SuperTechFans

博客园 - chelsea

Performance Tuning Technique: Ultra-Fast ASP.Net 书摘 ASP.Net 备忘 On Extension Method: 扩展方法该如何使用 REST on ASP.Net MVC (and Future) IoC 问题域 Log 问题域 Validation 问题域 代码的物理组织 C#代码组织: project over folder C#泛型: 消除Visitor模式的循环依赖, 以及无聊的Accept方法 ORM问题域 Web开发问题域 向 Spring.Net 提交的建议被采纳并实现了 开源.Net中文分词组件 [导入]C# 备忘录 [导入]C++/CLI:被忽视的集成技术 DNN4 (DotNetNuke) 备忘录 持续集成 .Net手册 The Programming Language Idioms
The C# Programming Language Notes II
chelsea · 2006-06-27 · via 博客园 - chelsea

C# 2.0 的表达能力已经在我们的项目中得到检验,先看看1.1时哪些问题没弄明白

Q: 4,@ 取消转义

取消字符串转义尚可理解,不过连关键字都变成普通标识了,实在看不出有多大意义

A: 与其他编程语言建立接口时很有用

.Net多语言平台, foreach 在C++中不是关键字,可以作为函数名称,那么导入到C#程序中就是 @foreach

Q: 13,属性权限

get/set好像不能设置不同的权限,比如,我想internal set,而public get,不知怎么弄

A: 现在可以了

public String Name{

    get { return name; }

    internal set { name = value; }

}

Q: 16,new virtual有没有意义?

A: 显式的new,virtual,override声明和隐藏规则,都旨在消除版本演化的影响,使语义不会随着父类增删方法,改变方法修饰符而变化 ("new virtual", "abstract override"属于C#的新发明)

新写一点笔记:

1,Prefer using to finally, workaround for GC + dtor

using 语句

static void Main() {
    using (TextWriter w = File.CreateText("test.txt")) {
       w.WriteLine("Line one");
       w.WriteLine("Line two");
       w.WriteLine("Line three");
    }
}

2,委托

“委托的一个有趣且有用的属性在于,它不知道也不关心它所引用的方法的类;它所关心的仅是所引用的方法与委托具有相同的参数和返回类型”--函数式编程风格在面向对象语言中的完美融合 ,配之以2.0引入的匿名方法,即模拟的lambda,匿名方法可隐式转换为与之兼容的委托类型;3.0将引入真正的lambda

3,Attribute: Pointcut在代码中的手工配置

4,用户定义类型转换:Mapper Design Pattern在语言层面的支持

5, 嵌套类型

常量或类型声明会隐式地声明静态成员,即区别于Java,C#所有嵌套类型都是静态的,嵌套类型和包含它的那个类型并不具有特殊的关系,但可以访问包含它的那个类型可访问的所有成员,包括private,即类似C++的friend

6,数组协变

数组协变不能扩展 value-type 的数组。例如,不存在允许将 int[] 当作 object[] 来处理的转换

7,重写显式接口成员实现

由于显式接口成员实现不能被声明为虚的,因此不可能重写显式接口成员实现。然而,有很多种方法可以绕过此限制,比如:

  • 显式接口成员实现的内部完全可以调用另一个方法,只要将该方法声明为虚方法,派生类就可以重写它了

  • 一个类若继承了某个接口的实现,则只要将该接口列入它的基类列表中,就可以重新实现 (re-implement) 该接口

8,finally

" C# 中,利用 finally 块(第 8.10 节)可编写在正常执行和异常情况下都将执行的终止代码。在 C++ 中,很难在不重复代码的情况下编写这样的代码"--这个有点自吹自擂了,C++的析构函数是最好的finally块,这个说了很多遍了,不说了

9,析构函数的异常

特别值得注意的是在析构函数执行过程中发生的异常。如果在析构函数执行过程中发生异常且该异常未被捕获,则将终止该析构函数的执行,并调用它的基类的析构函数(如果有)。如果没有基类(如 object 类型中的情况),或者如果没有基类析构函数,则该异常将被忽略

10 泛型

不同于C++大部分实现的编译时展开(膨胀)和Java的编译时擦拭,.Net反而是运行时展开(膨胀),造成的影响有:

  • 泛型类声明中的静态变量在相同封闭构造类型(第 20.5.2 节)的所有实例之间共享,但是不会在不同封闭构造类型的实例之间共享(与C++相同,与Java不同)

  • 泛型和非泛型同名类可以共存(Queue, Queue<T>),避免流血分裂(Java则是通过擦拭法来避免)

11 迭代器

正成为主流编程语言的标配,Java保持沉默,C++还只是通过标准库来支持,Python和C#则提供语法级别的支持

12 可空类型

原以为是Null Object Design Pattern在语言级别的支持,当发现“ HasValue 为 false 时,尝试访问 Value 属性将引发异常”就知道不是那么回事了,实际上Null Object确实不容易统一实现,Dynamic Proxy有可能是潜在手段之一,不过C#的可空类型有点像专门为数据库访问做的优化;为了这个特定领域,引入专门的语言扩展,特定API的简便不知道能不能值回复杂性的增加;其实完全可以通过类库的形式来实现可空类型:Nullable<T>,为它定义到 T 的隐式转换运算符和其它必要的设施即可,实际情况也差不多如此:int? 之类的声明是System.Nullable<int>的简写,而 a ?? b更是 a == null ? b : a的简化形式