C#笔录

     笔录是在学过c++ 的基础上记录的,如果你学过c++,那么比较快速学习C#是可能的,但细节与高质量的程序设计还是要更多的实践经验才能做的出。这是我大概一天的时间记录下来的,有些粗略,但是主要把c#的特别之处记录下来了,给大家分享希望能给予快速学习C#的人帮助。

 

 

checked   整数算术运算是 溢出检查 
unchecked
使用checked是 运算溢出产生溢出异常
使用unchencked时 返回值被戳掉不复习类型的高位
 int x=1000034l0;
  int y=38388483;
static in f()
{
return checked (X*Y);//编译错误,溢
return unchecked (X*Y);/
不可预知的结果
return x*y//编译错误
}
case不可以不加跳转或结束
switch()可以是字符型参数
case "OK":------
caseh "": 还可以是null

语句:
foreach:收集一个集合中的各元素,并针对个性元素执行内嵌语句;

foreach (type identifier in expression) embedded-statement :

ex:必须是集合类型

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;
namespace Test09
{
    class Program
    {
        static void Main(string[] args)
        {
            ArrayList alt = new ArrayList();    //实例化ArrayList类
            alt.Add("用一生下载你");     //使用Add方法向对象中添加数据
            alt.Add("芸烨湘枫");      //使用Add方法向对象中添加数据
            alt.Add("一生所爱");      //使用Add方法向对象中添加数据
            alt.Add("情茧");       //使用Add方法向对象中添加数据
            alt.Add("痞子CAI");      //使用Add方法向对象中添加数据
            Console.WriteLine("您收藏的网名有:");  //输出提示
            foreach (string InternetName in alt)   //使用foreach语句输出数据
            {
                Console.WriteLine(InternetName);   //输出ArrayList对象中的所有数据
            }
            Console.ReadLine();

        }
    }
}

 
C#中的预处理指令之间不能出现实代码;
预处理指令都以#开头并位于行首;
条件编译:
发出错误与警告信息:
面向对象设计
类的关系;
c#中的this本身只有this.x的使用方式;C#中this是一个常量,没有this++等操作;


C#参数的类型
值传递:
编译程序给实参的值做一份拷贝,调用的方法不会修改内存中实参的值。
引用型参数:
并不开辟新的内存区域,应用引用型参数向方法产的参数时,编译程序把实际值在内存中的地址传递给方法;
输出参数:
调用方法前无需要对变量进行初始化,输出参数用于传递返回的数据;
数组型参数:
形参表中包含了数组型参数,它必须在参数表中位于最后,二:参数只能是一维数组;三:不能有ref和out修饰符;

静态方法只能访问类中的静态成员;
支持函数重载;
C#中=,&&,||,?:,new ,typeof ,sizeof,is 不可以进行重载;

运算符重载为静态的
public static player operator ++(Player p)
{
   .............
   ...........
 return p;

}
二元重载(DKR笛卡尔积)
public static DKR operator +(DKR d1,DKR d2)
{ DKR dkr = new DKR (0,0,0);
          dkr.x=d1.x+d2.x;
          ......
          ......
 return dkr;
}
C#中的域相当于c++中类的简单成员变量;
静态域 :siatic 修饰,内存中只有一个静态数据的拷贝,当第一个实例建立时,域被初始化;
以后不再进行初始化;所有类的实例共享一个副本;

只读域:只能在域的定义中和它所属类的构造函数中进行修改;
与const的区别::
const型表达式的值在编译时形成,而static readonly表达式的值直到程序运行时才形成。
C#中进行默认初始化,静态变量,非静态的对象变量和数组元素,被初始化为本身的默认值;
对于所有的引用类型的变量默认值为NULL;
bool=false;
类中:
域的默认初始化有两种情况:对静态域,类在装载时对其进行初始化;
非静态,在类的实例创建时进行初始化。
类属性:更充分体现对象的封装性:不直接操作类的数据内容,而是通过访问器进行访问;
它借助于get和set对属性值的读写; c++要程序员手动完成;
|||||||||||||||||||||||||
事件与索引指示器
事件:为类与类的实例提供了向外界发送通知的能力
索引指示器:可以像数组那一对对象进行索引访问。
事件(event)就是类或对象用来发出通知的成员,通过提供事件的句柄,客户能够把事件和可执行代码联系在一起;
事件所声明的类型必须是一个代表(delegate)类型,代表类型应预先声明,如
public delegate void EventHandler
a
事件的预定
通过左操作符“+=”实现:okButton.Click+=new EventHandler(okbuttonClick);
只要事件触发方法就被调用;
撤销事件采用“-=”;
对事件的触发相当于调用事件所表示的原型——delegate;调用前确保不为null;
事件的访问器
使用事件访问声明:当每个事件的存储开销太大,我们可以在类中包含事件访问声明,按私有成员的规则存放事件句柄列表;
访问器的声明包括两种:添加访问声明和删除访问声明;访问器实际还包含了一个为value的隐藏参数。所以访问器在使用局部变量时不鞥再使用这个名字;

索引指示器
提供通过索引方式方便地访问类的数据信息的方法;提供了控制访问权限的另一种方法;
C#中的派生与继承
派生类只能从一个类中继承;派生类从它的直接基类中继承成员:方法,域,属性,事件,索引器;出去构造与析构函数;
类中可以定义虚方法,虚属性,和虚索引指示器,它的派生类能够重载这些成员,从而展示出多态性;
base保留字:
为派生类调用基类成员提供一个简写的方法;
class B
{
  public void G()
{

   int x=base[0];// A的索引器
   base.F();//A的成员函数

}
}
C#中的多态:
同一操作作用于不同的类的实例,不同的类将进行不同的解释,最后产生不同的执行结果;
编译时多态:
通过重载来实现。对于非虚的成员来说,系统在编译时,根据传递的参数,返回的类型等信息决定实现何种操作。
运行时的多态
直到系统运行时才根据实际情况决定实现何种操作。通过虚成员实现。
编译时多态提供运行速度快,运行时多态带来高度灵活性。
对基类虚方法的重载时函数重载的另一种特殊形式,要求形参,类型,顺序必须与基类中的虚函数完全一致,
在派生类中声明对虚方法的重载,要求在声明中加上override 关键字,不能有new ,static ,virtual修饰符。

抽象与密封
抽象类:表达抽象的概念,用此为它的派生类提供一个公共的界面。
1.只能做基类,不能被初始化,
2.允许包含抽象成员,
3.抽象不能同时是密封。
非抽象类从抽象类派生,则其必须通过重载来实现所有继承而来的抽象成员。
抽象方法:只能在抽象类中声明抽象方法,不能用static或virtual来修饰。方法不能有任何可以执行代码,包括{};等。
密封类:
在声明时使用sealed修饰符,防止该类被其它类继承。
情形:
阻止继承,如果密封类中存在虚函数,该成员函数可以转换为非虚的,virtual 不再生效。
密封方法:防止派生类中该方法被重载。

//////////////////////////////////////////////////////

深入C#
接口
组件化程序设计
三层式应用程序体系结构:
表示层面向用户提供数据,展现用户接口,
商业层实施逻辑,表示层使用使用商业层提供的服务。
数据访问层执行具体的数据访问服务,包括检索,与存储。
接口
同一接口中同一修饰符不能出现多次,
接口可以多继承。
**一旦成员函数被覆盖以后,索引对其访问都被覆盖以后的成员拦截了。(101页);
接口成员的全权名
(构成)接口名.成员名

接口的实现
接口可以通过类或结构来实实现。

如果类实现了某个接口,类也隐式继承了该接口的所有父接口。

DLL:
包括可执行代码,各种类型的预定义的数据和资源,扩大了库文件的使用范围。
编译单元:
能够被编译器编译的最小单元。
名字空间和装配
名字空间提供一个逻辑上的层次结构体系,可做为内外部结构体系。
装配:用于应用程序的打包packing和部署deployment。
装配可能包含若干个相互独立的模块,可以包含许多类型,最用与这些类型的可执行代码,以及对其它装配的引用。

装配的两种类型:应用程序和库

 

 

 

你可能感兴趣的:(生活杂谈)