C#基础知识点(二)

一些其他的基础知识点,由于本人对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:可以定义一切类型,可以是自己自定义的对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值