摘要: C#中经常用const或者readonly来定义不可改变常量,那么如何使用它们呢?主要内容:const和readonly的区别 readonly的补充说明 1. const和readonly的区别主要的区别在于 const是在编译时确定值的,readonly是在运行时确定值的。因此,用const修饰的字段,必须在定义的时候就赋值,否则编译器报错。而readonly修饰的字段除了可以在定义时赋值以外,还可以在构造函数中赋值。验证的代码如下:using System;namespace Test7{ public class CLRviaCSharp_7 { const string cValue 阅读全文
posted @ 2011-06-29 08:59 wang_yb 阅读(657) 评论(0) 推荐(2) 编辑
摘要: C#中调用一个函数时生成的IL代码有两种形式,分别为call 和 callvirt。主要内容call和callvirt的区别call和callvirt的例子1. call和callvirt的区别call的callvirt的区别主要有两点:1)call可以调用静态方法,实例方法和虚方法 callvirt只能调用实例方法和虚方法,不能调用静态方法2)call一般是以非虚的方式来调用函数的 callvirt是以已多态的方式来调用函数的2. call和callvirt的例子示例代码如下:using System;namespace Test6{ public class CLRviaCSharp_6 阅读全文
posted @ 2011-06-28 15:24 wang_yb 阅读(4016) 评论(0) 推荐(1) 编辑
摘要: 一直以为像C#这种内存自动回收的语言,开发人员无法操作其在内存的布局。现在才知道,CLR也提供了相应的接口,让我们可以更细粒度的对代码进行控制。主要内容C#中控制内存布局的Attribute模拟C#中的Union类型1. C#中控制内存布局的Attribute为了控制自己定义的类或结构在内存中的布局,CLR提供了System.Runtime.InteropServices.StructLayoutAtrribute这个Attribute。这个Attribute的构造器中提供了3种Layout:1)LayoutKind.Auto : 由CLR自动排列字段2)LayoutKind.Explicit 阅读全文
posted @ 2011-06-20 08:50 wang_yb 阅读(987) 评论(0) 推荐(0) 编辑
摘要: 在C#中,除了可以在类的构造函数中初始化私有字段的值,还可以在私有字段定义的地方进行初始化(即默认赋值)。下面讨论默认赋值和在构造函数中赋值的区别,以便更好的在代码中使用这两种赋值。主要内容:对代码生成的影响对代码执行的影响1. 对代码生成的影响首先构造两个Class,其中ClassA使用默认赋值的方式,ClassB使用构造函数赋值的方式。代码如下: public class ClassA { private Int32 a = 123; private String b = "abc"; private Object c = new object(); public Cl 阅读全文
posted @ 2011-06-17 16:44 wang_yb 阅读(1367) 评论(3) 推荐(3) 编辑
摘要: 传值调用和传引用调用是几乎所有主流语言都会涉及到的问题,下面我谈谈我对C#中传值调用和传引用调用的理解。1. 一般对C#中传值调用和传引用调用的理解如果传递的参数是基元类型(int,float等)或结构体(struct),那么就是传值调用。 如果传递的参数是类(class)那么就是传引用调用。 如果传递的参数前有ref或者out关键字,那么就是传引用调用。验证示例的代码如下:using System;public class ArgsByRefOrValue{ public static void Main(string[] args) { // 实验1. 传值调用--基元类型 int i = 阅读全文
posted @ 2011-05-18 23:11 wang_yb 阅读(23395) 评论(8) 推荐(9) 编辑
摘要: 本问题源于《你必须知道的.net》第六回,最近在学习anytao的大作《你必须知道的.net》,看到第六回深入浅出关键字---base和this时,发现其中有个例子的C#代码和生成的IL似乎不一致。1. 问题描述主要就是其中base和this示例中的main函数。完整的代码请参考原博客深入浅出关键字---base和thispublic class BaseThisTester { public static void Main(string[] args) { Audi audi = new Audi(); audi[1] = "A6"; audi[2] = "A 阅读全文
posted @ 2011-05-15 14:54 wang_yb 阅读(768) 评论(0) 推荐(0) 编辑
摘要: 本篇主要讲解如何在django的模板中自定义tag。主要内容:自定义tag的步骤带参数和不带参数的自定义tag在模板中使用自定义的tag补充说明1. 自定义tag的步骤自定义tag主要有以下5步:1.1 新建django工程 customTags。建立方法参见Django使用心得(一)1.2 新建文件夹templatetags,好像必须是这个名字。1.3 在文件夹templatetags中新建一个空文件__init__.py,表明templatetags是个python模块。1.4 在此文件夹中新建python文件,并实现自定义的tag。1.5 在settings.py文件的INSTALLED 阅读全文
posted @ 2011-05-12 23:15 wang_yb 阅读(3466) 评论(0) 推荐(1) 编辑
摘要: 本篇主要讲解如何将可复用的功能作成独立的App,并从主Project中分离出来,便于以后加入到任意Project中。下面以一个简单的例子来说明如何物理上分离各个可复用的App建立1个主Project和3个子App简单的实现3个子App关联主工程和3个子App1. 建立1个主Project和3个子App首先建立一个django project,名为siteWithApps。建立方法参见Django使用心得(一)然后建立3个子工程:(3个子工程没有实际的功能,只是模拟如何在django中分离App)subApp1: 模拟权限认证功能,认证成功后返回siteWithAppssubApp2: 无实际功 阅读全文
posted @ 2011-04-30 13:19 wang_yb 阅读(7622) 评论(0) 推荐(1) 编辑
摘要: 主要内容:程序集和模块区别 多文件程序集1. 程序集和模块区别关于.net中程序集和模块的区别,其实已经有很多人讨论过了,希望本篇仍对大家有所帮助。程序集与模块的共同点:都是为了定义一些可重用的类型。 对于引用者来说,调用程序集中的公开类型(public)和模块的公开类型,没有什么分别。程序集和模块的区别:(主要是程序集包含的内容更加丰富)程序集可以发布,而模块不能。 程序集标记了一个版本号,可以唯一的标记程序集。 程序集还可以包含有关联的安全信息。以下演示编译程序集和模块的方法:首先定义两个文件,MyAssembly.cs和MyModule.cs。using System;namespace 阅读全文
posted @ 2011-04-24 22:38 wang_yb 阅读(2087) 评论(1) 推荐(4) 编辑
摘要: 本篇主要内容:django中引用javascript django中引用css及图片资源1. django中引用javascriptweb开发中必然要引用一些javascript的函数库来进行一些前端的处理,django也不例外。下面主要介绍如何在django中引用当前比较流行的js库JQuery。首先,新建一个django工程siteWithResources,新建的方法参照Django使用心得(一)然后分别配置以下几个文件:1.1 urls.pyurlpatterns = patterns('', # Example: # (r'^siteWithResources 阅读全文
posted @ 2011-04-21 22:26 wang_yb 阅读(12233) 评论(0) 推荐(0) 编辑