一些其他的基础知识点,由于本人对C++、Java基础语法熟悉,集合类、继承多态等不再记录。
值类型,引用类型,装/拆箱
值类型指的传统的基础数据类型,比如int,long,float,double,bool 和 struct 等。
引用类型指的string 和 class。
引用类型比值类型复杂。引用类型包括两部分:对象和指向对象的引用。比如class a=new class(), class b=a。那么为b赋值的时候,仅仅把a的引用地址复制给b,这样a和b就指向内存中的同一个地址(和C++中貌似不一样,C++中b应该是获得a的一份拷贝,有自己独立的内存空间的。C#中的b对象类似C++中的指针)。a和b是关联的。
装箱:值类型转成引用类型,箱可以理解成引用类型。拆箱,反之。
迭代器
IEnumerable(可枚举类型),IEnumertor(可枚举数)。
IEnumerable就是使实现这个接口的对象成为可枚举类型。有这个概念即可。
特性(Attribute),依赖注入,控制反转
**控制反转**IoC是Inversion of Control的缩写,是说对象的控制权进行转移,转移到第三方,比如转移交给了IoC容器,它就是一个创建工厂,你要什么对象,它就给你什么对象(个人理解就是工厂模式)。
依赖注入DI是Dependency Injection缩写,是控制反转思想的一种具体实现。
参见>http://blog.csdn.net/chen_victor/article/details/76329336
个人理解,依赖注入和控制反转只是一种概念,了解即可,本质上就是工厂模式。
特性结合反射技术就可以实现依赖注入。
特性Attribute 的作用是添加元数据。编译器用元数据来辅助编译,调试器用元数据来调试程序。(个人感觉有点C++中ifdef的含义)
例子,引自>http://kb.cnblogs.com/page/87531/
#define Buged
using System;
using System.Diagnostics; // 注意:这是为了使用包含在此名称空间中的ConditionalAttribute特性
namespace Con_Attribute
{
class Program
{
static void Main(string[] args)
{
// 虽然方法都被调用了,但只有符合条件的才会被执行!
ToolKit.FunA();
ToolKit.FunB();
ToolKit.FunC();
ToolKit.FunD();
}
}
class ToolKit
{
[ConditionalAttribute("Li")] // Attribute名称的长记法
[ConditionalAttribute("Buged")]
public static void FunA()
{
Console.WriteLine("Created By Li, Buged.");
}
[Conditional("Li")] // Attribute名称的短记法
[Conditional("NoBug")]
public static void FunB()
{
Console.WriteLine("Created By Li, NoBug.");
}
[ConditionalAttribute("Zhang")]// Attribute名称的长记法
[ConditionalAttribute("Buged")]
public static void FunC()
{
Console.WriteLine("Created By Zhang, Buged.");
}
[Conditional("Zhang")] // Attribute名称的短记法
[Conditional("NoBug")]
public static void FunD()
{
Console.WriteLine("Created By Zhang, NoBug.");
}
}
}
运行结果是由代码中“#define Buged ”这个宏定义所决定,只运行FunA(),FunC()。
const和readonly区别
1,const:编译时 ,readonly:运行时。
2,作用域:const:只能定义基本类型,如int,string等等。readonly:可以定义一切类型,可以是自己自定义的对象。