- 浏览: 518465 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (299)
- Oracle(pl/sql_Erp_Pro*C) (69)
- 设计模式 (4)
- spring (23)
- ext (17)
- apache开源项目应用 (4)
- jquery (16)
- 生活琐事 (8)
- 下载资源 (23)
- mysql (2)
- Eclipse使用积累 (5)
- 报表类(报表/图表) (13)
- php (4)
- Web多彩文本框 (3)
- json (4)
- jqgrid (2)
- ant (2)
- java算法积累 (8)
- EL表达式/JSTL (4)
- poi (3)
- gwt (2)
- 爬网第一步 (2)
- javascript (17)
- Javaweb (8)
- tomcat (1)
- flex (1)
- Java&DB (3)
- J2SE (7)
- linux (3)
- 数据结构 (1)
- dot net (5)
- struts (1)
- ibatis (1)
- log4j (1)
- 项目管理 (1)
- Java native interface(jni,jacob......) (5)
- applet (1)
- VB.net/C#.net/JNI (20)
- css (1)
- Sqlite (1)
- servlet (1)
- REST (1)
最新评论
-
wenhurena:
能不能给一下解压密码roki.work.2017@gmail. ...
Ebs解体新書と学習資料1 -
liutao1600:
楼主写的太好了,每天学习~~
Spring_MVC(6)测试 -
liutao1600:
太好了,每天学习你的文章~~~
Spring_MVC(3)表单页面处理 -
liutao1600:
学习了,太好了
Spring_MVC(2)控制层处理 -
liutao1600:
学习了~~~
Spring_MVC(1)构建简单web应用
6.类型和成员基础
1.Class的可见性有public和internal两种,public对所有程序集都可见,internal仅对其所在的程序集可见。默认是public的。
2.友元程序集,
使用friend assembly可以实现单元测试,而不使用反射技术。
书上讲的是按照命令行编译。
我测试用的是vs2005的solution,如下:
3.成员的可访问性
成员默认是private的,接口类型的成员都是public的。
子类重写父类的成员时,原始成员与重写成员要有相同的可访问性——C#的约束;CLR的约束是,重写成员的可访问性不能更低。
CLR和C#是不一样的,如表:
CLR术语 C#术语
Private private
Family protected
Family and Assembly 不支持
Assembly internal
Family or Assembly protected internal
Public public
4.静态类
static只能用于class,不能用于struct,因为CLR要求值必须实例化,而且不能控制实例化过程。
C#对静态类的约束:
静态类必须直接从System.Object派生
静态类不能实现任何接口
静态类只能定义静态成员:字段,方法,属性,事件
静态类不能用作:字段,方法,参数,局部变量。
在MSIL中,不会为静态类生成ctor,会将其标记为abstract和sealed
5.部分类
CLR不支持partial,只是C#的语法。所以某个类型的源码必须使用同一种编程语言
6.组件,多态和版本控制
.NET版本号2.7.1.34,包含4个部分:主版本号,次版本号,内部版本号,修订版本号。
修订版本,向后兼容,改变内部/修订版本号;
发布新版本,不向后兼容,改变主/次版本号。
多态中,子类重写父类的虚方法,会引起版本控制问题,即父类发生改变,其版本低于子类版本,会导致子类行为变化。
C# 5个用于 类/类成员 的 影响组件版本控制 的 关键字:
abstract:用于类/类成员
virtual和override:用于成员
sealed:用于类/类成员。用于成员时,仅用于重写了虚方法的方法。
new,用于类/类成员/常量/字段
C#调用虚方法:
CLR允许类中定义多个"同名方法",仅仅是返回类型不同,IL允许这样做;C#不允许,忽略返回值的类型,相应的用"转换操作符"实现IL中的"同名方法"。
调用方法相应的MSIL:
一个是call,用来调用静态方法,实例方法和虚方法。必须要指定调用方法的类型(对于静态方法)或者对象(对于实例方法/虚方法),如果在该类型/对象中找不到该方法,会检查其基类来匹配方法。
另一个是callvirt,用来调用实例方法和虚方法,不能用于调用静态方法。必须要指定调用方法的实例对象,如果这个对象为null,会抛出NullReferenceException异常,这意味着每次调用前都会有额外的null检查,从而比调用call慢一些。
如下代码所示:
public sealed class Program
{
public Int32 GetFive()
{
return 5;
}
public static void Main()
{
Program p = null;
Int32 x = p.GetFive(); //在C#中,使用callvirt,会抛出NullReferenceException异常
}
}
在C#编译器中,使用callvirt调用所有实例方法(包括虚方法),使用call调用所有静态方法。对于其他的编译器,这一点不能保证,所以在虚方法和非虚方法之间改动而不重新编译,会产生无法预测的问题。
C#使用call而不用callvirt调用虚方法的特例:ToString,见下:
internal class SomeClass
{
public override string ToString()
{
return base.ToString();
}
}
这时候,生成call的IL代码。因为如果使用callvirt,意味着这时一个虚方法,从而递归执行该方法,直到AppDomain的堆栈溢出。
在调用值类型定义的方法时,使用call。这是因为,首先,值类型是密封的,从而不存在虚方法;另外,值类型永远不会为null,所以永远不会抛出NullReferenceException异常;再者,如果使用callvirt,就要使用装箱机制,性能会有极大影响。
在设计class的过程中,要尽量少定义虚方法。取代办法:可以定义一组重载方法,经其中最复杂的方法虚拟化,而将所有有用的重载非虚拟化,示例如下:
public class Set
{
private Int32 m_length = 0;
//这个有用的重载是非虚拟的
public Int32 Find(Object value)
{
return Find(value, 0, m_length);
}
//这个有用的重载是非虚拟的
public Int32 Find(Object value, Int32 startIndex)
{
return Find(value, 0, m_length - startIndex);
}
//功能最丰富的方法是虚拟的,可以被重写
public Int32 Find(Object value, Int32 startIndex, Int32 endIndex)
{
.//具体实现
}
}
sealed密闭类尽量使用。将sealed改为非密闭的容易,反之困难;性能也快,因为sealed一定是非虚拟的,从而编译器不用考font-size: 10pt; color: red; font-family:
发表评论
-
程序集与托管模块
2010-10-26 16:22 1241本文是为了学习程序集而整理的网上资料,主要包括两个部分,概念和 ... -
.NET程序集
2010-10-26 15:03 2232【主要内容】@将源代码 ... -
strong-named
2010-10-26 14:48 876前段时间自己整理的一个有关strong-named assem ... -
CLR笔记(一)
2010-10-26 13:22 18051.CLR的执行模型 ... -
Java调用C#
2010-10-25 22:49 1838Java调用C# 下载: http://www.co ... -
Managed Extensions for C++ Reference
2010-10-25 18:10 1389Managed Extensions for C++ Refe ... -
注入托管代码
2010-10-25 17:18 1721前言:本文的重点不在 ... -
jni调用dll及dll已用其它dll的资料
2010-10-25 16:00 899http://blog.csdn.net/KONGKONGWJ ... -
C# method calls within a Java program
2010-10-23 16:11 1066.net产生的比java晚,其类库的封装在某些方面也比ja ... -
走近COM Interop
2010-10-23 15:40 1637走近COM Interop—— RCW ... -
get chartobjects from VB.net
2010-10-18 10:34 1341Excel.Sheets sheets = oWB.Works ... -
VB.NET调用DLL实现方法解析
2010-10-13 10:43 3510VB.NET开发平台 ... -
VB.net 的Me My MyBase MyClass
2010-10-11 23:46 2014第一次接触 Visual Basic 中的 Me、My、M ... -
使用.Net访问Office编程接口(PIA和IA的区别)
2010-10-11 10:25 3501在这篇文章里面,我将向大家介绍如何在.Net中访问Offi ... -
Exposing .net Components to Com
2010-10-11 09:47 813http://www.codeproject.com/KB/C ... -
.net Com组件注册
2010-10-11 09:30 1963本文将详细为大家介绍一个java调用.net DLL的方法,以 ... -
vb.net 封装组件成com的方法
2010-10-10 17:16 1539前几天一直在研究如何将.net的组件封装成com供非托管代码调 ... -
Writing an Activex control in VB.net
2010-10-09 22:33 1407The problem with that example i ... -
VB set Excel color
2010-10-08 17:30 939Sub Macro3()'' Macro3 Macro' ' ...
相关推荐
【标题】"CLR笔记(一)"揭示了对.NET框架中的Common Language Runtime(CLR)的初步探索。这篇笔记可能涵盖了CLR的基础概念、工作原理以及在实际编程中的应用。 【描述】虽然描述部分为空,但根据标题我们可以推测这...
### NICK笔记.CLR 关键知识点解析 #### 一、应用程序域(AppDomain) **定义**: - 应用程序域(AppDomain)可以被视为一种轻量级的进程(逻辑进程),它是在一个物理进程中的隔离环境。 **特点**: 1. **多AppDomain...
C# CLR,全称Common Language Runtime,是.NET Framework的核心组件,负责执行代码并提供许多基础服务,如类型安全、垃圾回收、异常处理等。本文主要总结了关于C# CLR的一些关键知识点。 首先,.NET Framework由两...
c#学习笔记(1) 51099在线学习网发布 文章来源:网络收集 发布时间:2006-05-25 字体: [大 中 小] 51099在线学习网 http://www.51099.com 1, 结构(struct) 与 类(class) [attributes] [modifiers] struct ...
Q1: 什么是CLR? A1: CLR (Common Language Runtime) 是一个可以由多种编程语言使用的“运行时”。 Q2: CLR的核心功能有哪些? A2: 1)内存管理;2)程序集加载;3)安全性;4)异常处理;5)线程同步 Q3: CLR与使用...
"计算机书籍读书笔记参考.docx" 本文档主要围绕 ASP.NET 和数据仓库两个主题展开,详细介绍了 ASP.NET 的工作方式、事件驱动模型、CLR(Common Language Runtime)运行阶段通用语言,以及数据仓库的概念、特点、...
二、.NET Framework 概述 * .NET Framework 是一个 runtime 环境,提供了公共语言运行库(CLR)和 Framework 类库。 * CLR 是 .NET Framework 的核心,负责执行托管代码。 * .NET Framework 提供了许多优点,例如...
8. **jb51.net.txt**:此文本文件可能包含了一些笔记、链接或其他与学习过程相关的资料,具体内容需打开查看。 通过阅读《CLR via C# 3rd》,开发者不仅可以深入了解.NET Framework的内部运作,还能提升编写高效、...
最后,学习C#不仅仅是掌握语法,还包括理解.NET框架和CLR(Common Language Runtime)的工作原理,以及如何利用Visual Studio这样的IDE进行高效开发。了解这些背景知识,将有助于开发者更好地利用C#的全部功能。 ...
3. mscoree.dll:这是.NET Framework的公共语言运行时(CLR),负责执行托管代码。 4. rsdeploy.dll:可能是一个与部署相关的组件,可能用于安装或更新应用程序。 5. learning.exe:这应该是主程序文件,即C#学习...
从给定的文件信息来看,这是一份关于《算法导论》(第二版)的习题解答笔记,由Philip Bille编写,旨在为Cormen、Leiserson和Rivest所著的经典教材中的练习题提供解答建议。下面将根据这份文件的信息,详细解析其中...
《CLR via C# 3rd Edition》是C#编程领域的一部经典著作,由著名技术专家Jeffrey Richter撰写。这本书深入浅出地探讨了.NET ...书中提供的下载地址指向的文本文件可能是书籍的摘录或笔记,可以作为学习的辅助资料。
2. **.NET框架结构**:包括CLR(Common Language Runtime)和CLS(Common Language Specification),解释它们在.NET中的角色,如何管理内存、异常处理和类型安全。 3. **ASP.NET Web开发**:深入探讨ASP.NET框架,...
HY11P35学习笔记 HY11P35是一款微控制器芯片,广泛应用于工业自动化、消费电子、汽车电子等领域。今天,我们将通过对HY11P35学习笔记的分析,了解这款芯片的程序架构、系统初始化设置、interrupt处理程序等知识点。...
深入.NET平台和C#编程的学习笔记,主要涵盖了.NET框架的基础知识和C#编程的核心概念。首先,.NET框架由两大部分组成:公共语言运行时(CLR)和框架类库。CLR是所有.NET应用程序运行的基础,它如同一个虚拟机,提供了...