zoukankan      html  css  js  c++  java
  • C#基础知识

    1.C#中定义接口所使用的keyword是:interface
    2.C#是一种纯粹面向对象语言。

    面向对象语言具有的特点是:继承、封装、多态。
    3.值类型和引用类型的区别:

    CLR支持两种类型,引用类型和值类型。这两种类型的不同之处是。他们在.NET类层次结构中的位置不同。那么.NET为其分配的内存的方式也是不同的。
    引用类型和值类型都继承自Systerm.Object类。

    不同之处,差点儿全部的引用类型都是直接从Systerm.Object继承,而值类型则是继承Systerm.Object的子类Systerm.ValueType类。


    引用类型和值类型的内存分配,区别在于CLR是如何处理它们的内存需求。

    值类型在执行是(托管栈)中分配,而引用类型放在(托管堆)中。托管栈将引用托管堆。


    4.类、对象、结构体的区别:

    (1)struct 是值类型,class 是对象类型
    (2)struct 不能被继承。class 能够被继承
    (3)struct 默认的訪问权限是public,而class 默认的訪问权限是private.
    (4)struct总是有默认的构造函数。即使是重载默认构造函数仍然会保留。

    这是由于Struct的构造函数是由编译器自己主动生成的。可是假设重载构造函数,必需对struct中的变量全部初始化。

    而且Struct的用途是那些描写叙述轻量级的对象,比如Line,Point等。而且效率比較高。

    class在没有重载构造函数时有默认的无參数构造函数。可是一被重载些默认构造函数将被覆盖。
    (5)struct的new和class的new是不同的。struct的new就是执行一下构造函数创建一个新实例再对全部的字段进行Copy。

    而class则是在堆上分配一块内存然后再执行构造函数。struct的内存并非在new的时候分配的。而是在定义的时候分配

    參考博客:(1)http://blog.csdn.net/dyllove98/article/details/9336367
    (2)http://www.cnblogs.com/liuzijing688/archive/2008/01/11/1034893.html

    5.抽象类、封闭类、静态类的特点

    (1) 抽象类与接口紧密相关。它们不能实例化,而且经常部分实现或根本不实现。

    抽象类和接口之间的一个主要区别是:类能够实现无限个接口,但仅能从一个抽象(或不论什么其它类型)类继承。

    从抽象类派生的类仍可实现接口。

    能够在创建组件时使用抽象类,由于它们使您得以在某些方法中指定不变级功能。但直到须要该类的特定实现之后才实现其它方法。抽象类也制定版本号。由于假设在派生类中须要附加功能。则能够将其加入到基类而不中断代码。
    在 C# 中,使用 abstract 修饰符。

    (2) 封闭类即密封类,主要是为了不想被继承而设计的。在class前面用sealed修饰,代表私有的。
    密封类不能用作基类。因此,它也不能是抽象类。密封类主要用于防止派生。

    由于密封类从不用作基类。所以有些执行时优化能够使对密封类成员的调用略快。


    在对基类的虚成员进行重写的派生类上的类成员、方法、字段、属性或事件能够将该成员声明为密封成员。在用于以后的派生类时,这将取消成员的虚效果。方法是在类成员声明中将 sealed keyword置于 override keyword的前面。
    (3) 静态类和类成员用于创建无需创建类的实例就能够訪问的数据和函数。

    静态类成员可用于分离独立于不论什么对象标识的数据和行为:不管对象发生什么更改,这些数据和函数都不会随之变化。

    当类中没有依赖对象标识的数据或行为时,就能够使用静态类。
    类能够声明为static的,以指示它仅包括静态成员。不能使用 new keyword创建静态类的实例。

    静态类在载入包括该类的程序或命名空间时由 .NET Framework 公共语言执行库 (CLR) 自己主动载入。
    使用静态类来包括不与特定对象关联的方法。

    比如,创建一组不操作实例数据而且不与代码中的特定对象关联的方法是非经常见的要求。

    您应该使用静态类来包括那些方法。

    静态类的主要功能例如以下:
    它们仅包括静态成员。
    它们不能被实例化。


    它们是密封的。
    它们不能包括实例构造函数(C# 编程指南)。

    因此创建静态类与创建仅包括静态成员和私有构造函数的类大致一样。私有构造函数阻止类被实例化。
    使用静态类的长处在于,编译器能够执行检查以确保不致偶然地加入实例成员。编译器将保证不会创建此类的实利。
    静态类是密封的,因此不可被继承。静态类不能包括构造函数。但仍可声明静态构造函数以分配初始值或设置某个静态状态。

    6.如何理解静态变量和静态方法?静态构造函数的作用是什么?
    參考官方说法:http://msdn.microsoft.com/zh-cn/library/79b3xss3.aspx

    非静态类能够包括静态的方法、字段、属性或事件。

    即使没有创建类的实例,也能够调用该类中的静态成员。 始终通过类名而不是实例名称訪问静态成员。 不管对一个类创建多少个实例,它的静态成员都仅仅有一个副本。 静态方法和属性不能訪问其包括类型中的非静态字段和事件。而且不能訪问不论什么对象的实例变量(除非在方法參数中显式传递)。
    静态方法能够被重载但不能被重写,由于它们属于类。不属于类的不论什么实例。
    尽管字段不能声明为 static const,但 const 字段的行为在本质上是静态的。 这种字段属于类型,不属于类型的实例。

    因此,能够同对待静态字段一样使用 ClassName.MemberName 表示法来訪问 const 字段。 不须要对象实例。

    (未完。

  • 相关阅读:
    Luogu P2495 [SDOI2011]消耗战
    40. Combination Sum II
    39. Combination Sum
    22. Generate Parentheses
    51. N-Queens
    Codeforces Round #346 (Div. 2) E. New Reform
    Codeforces Round #346 (Div. 2) D. Bicycle Race
    HDU 5651xiaoxin juju needs help
    VK Cup 2016
    Educational Codeforces Round 10 D. Nested Segments
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/7235829.html
Copyright © 2011-2022 走看看