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

推荐订阅源

S
Security Affairs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Jina AI
Jina AI
P
Palo Alto Networks Blog
GbyAI
GbyAI
大猫的无限游戏
大猫的无限游戏
A
Arctic Wolf
Hugging Face - Blog
Hugging Face - Blog
小众软件
小众软件
Y
Y Combinator Blog
T
The Blog of Author Tim Ferriss
Blog — PlanetScale
Blog — PlanetScale
S
Schneier on Security
V
Vulnerabilities – Threatpost
C
Cybersecurity and Infrastructure Security Agency CISA
雷峰网
雷峰网
T
Tenable Blog
人人都是产品经理
人人都是产品经理
T
Tor Project blog
C
Cyber Attacks, Cyber Crime and Cyber Security
AWS News Blog
AWS News Blog
Microsoft Security Blog
Microsoft Security Blog
J
Java Code Geeks
Scott Helme
Scott Helme
SecWiki News
SecWiki News
C
CERT Recently Published Vulnerability Notes
Recorded Future
Recorded Future
I
InfoQ
Security Archives - TechRepublic
Security Archives - TechRepublic
Help Net Security
Help Net Security
Cloudbric
Cloudbric
C
Check Point Blog
Engineering at Meta
Engineering at Meta
TaoSecurity Blog
TaoSecurity Blog
B
Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
博客园_首页
N
News and Events Feed by Topic
云风的 BLOG
云风的 BLOG
MyScale Blog
MyScale Blog
腾讯CDC
量子位
Application and Cybersecurity Blog
Application and Cybersecurity Blog
K
Kaspersky official blog
Vercel News
Vercel News
F
Full Disclosure
T
Troy Hunt's Blog
Forbes - Security
Forbes - Security
S
Security @ Cisco Blogs

博客园 - 杨连国

win10 IoT开发 Serial​Device 返回 null .NET Delegates: A C# Bedtime Story【转载】 C++ 和 C# 变量定义的一点区别 变量定义 接口(CLR via C# 读书笔记) 生成器模式(builder) 基本类型、引用类型、值类型——(CLR via C#) 抽象工厂模式(abstract factory) 李建忠C#面向对象设计模式纵横谈 —— 单件模式 李建忠C#面向对象设计模式纵横谈 —— 面向对象设计模式与原则 程序设计和重构的目标 OO设计原则——读《你必须知道的.NET》 输入法灰掉bug解决 半角全角Bug解决 由迭代模式想到得——用设计模式理解 .NET ASCII 表设计之妙 调用VC封装的DLL时,两个类型匹配问题 调用非托管Dll Invoke 和 BeginInvoke 的区别
类型和成员基础(CLR via C#)
杨连国 · 2008-07-03 · via 博客园 - 杨连国

     类型的成员种类:没什么好说的
 
     类型的可见性:也没什么好说了,友元程序集可以在需要时了解一下

     成员的可见性

          需要知道 assembly <--> internal  family <--> protected 对应关系

          C#要求基类和子类对同一成员量的访问权限必须是一致的,例如在基类中是protected的成员变量,继承到子类后,依然是protected。而CLR却不是这么规定的,可以将protected变为public。

     静态类

          结构不能声明为静态的,因为CLR天生要求它必须实例化。

     部分类、结构、接口

          需要说明的是partial关键字是C#提供的,CLR并对此并不知晓。不错的属性!

     组件、多态和版本控制

          组件软件编程(Component Software Programming,CSP)

      如何调用虚方法

          在CLR内部调用方法有两个指令call 和 callvirt。
          call可以用来调用静态方法、实例方法和虚方法。调用静态方法是必须指明调用方
法的类型,调用实例方法或虚方法必须指明变量引用,call指令假定变量不为null。  callvirt指令用来调用实例方法和虚方法,JIT编译器在编译调用该指令时,会验证对应的变量是否为null,则抛出异常。  为什么C#编译器不只生成call指令呢?这是因为c#编译器团度觉得应该做null检查,尽管这样会牺牲一定的效率。  那是不是对虚方法的调用都会使用callvirt指令呢?有两种例外,第一种是子类覆写虚方法时调用基类的该方法,例如base.somemethod(),这是会使用call指令,因为使用callvirt会造成循环调用。第二种情况是对结构方法是用call指令,因为值类型天生就是不能为null的。

          另外需要注意,如果一个方法之前定义为非虚方法,而已经被广泛调用,就不应该再将其改为虚方法,因为之前的调用使用的是call指令,除非重新编译,否则会产生不可预期的结构。但是如果使用C#编程倒是不用担心这一点,因为C#编译器总是在调用实例方法时使用callvirt指令

     类型和成员可见性

          Jeffrey建议定义一个类时,缺省应该具有sealed关键字,并说出了几个原因,原因就不多说了,说的也对,如果仅仅是为了封装,而不需要继承,应该是sealed。但是C#缺省并无该关键字,也就是C#定义一个类,那么该类肯定可以继承,除非显示的添加了sealed关键字。但是在C#代码内,如果不加任何前缀修饰,默认是internal

     类型版本控制:说了一下new的问题,就不啰嗦了