zoukankan      html  css  js  c++  java
  • C#基础—类1

    https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/types/index

    转载自微软官方文档;

    相关概念:

    1、对象:现实世界中的实体(世间万物皆对象)

    2、类:具有相似属性和方法的对象的集合

    3、面向对象程序设计的特点:封装 继承 多态

    4、对象的三要素:属性(对象是什么)、方法(对象能做什么)、事件(对象如何响应)

    ☆相互关系:类是对象的抽象,对象是类的实例,类是一种抽象的分类,对象则是具体事物。

    比如如果车是一个类,某个人的一辆奔驰车就是一个对象,车的颜色质量就是它的属性,启动、停止这些动作则可以定义为车的方法。

    类型中可存储以下信息:

    • 类型变量所需的存储空间。

    • 可以表示的最大值和最小值。

    • 包含的成员(方法、字段、事件等)。

    • 继承自的基类型。

    • 在运行时分配变量内存的位置。

    • 允许执行的运算种类。

    对于 .NET 中的类型系统,请务必了解以下两个基本要点:

    • 它支持继承原则。 类型可以派生自其他类型(称为基类型)。 派生类型继承(有一些限制)基类型的方法、属性和其他成员。 基类型可以继而从某种其他类型派生,在这种情况下,派生类型继承其继承层次结构中的两种基类型的成员。 所有类型(包括 System.Int32C# 关键字:int等内置数值类型)最终都派生自单个基类型,即 System.Object(C# 关键字:object这样的统一类型层次结构称为通用类型系统 (CTS)。 若要详细了解 C# 中的继承,请参阅继承

    • CTS 中的每种类型被定义为值类型或引用类型。 这包括 .NET 类库中的所有自定义类型以及你自己的用户定义类型。 使用 struct 关键字定义的类型是值类型;所有内置数值类型都是 structs使用 class 关键字定义的类型是引用类型。 引用类型和值类型遵循不同的编译时规则和运行时行为。

    下图展示了 CTS 中值类型和引用类型之间的关系。

    值类型和引用类型
    CTS 中的值类型和引用类型

    值类型

    值类型派生自System.ValueType(派生自 System.Object)。 派生自 System.ValueType 的类型在 CLR 中具有特殊行为。 值类型变量直接包含它们的值,这意味着在声明变量的任何上下文中内联分配内存。 对于值类型变量,没有单独的堆分配或垃圾回收开销。

    值类型分为两类:结构枚举

    内置数值类型是结构,包含可以访问的属性和方法:

    值类型为“密封”,这意味着不能从 System.Int32 派生类型,并且不能将结构定义为从任何用户定义的类或结构继承,因为结构只能从 System.ValueType 继承。 但是,一个结构可以实现一个或多个接口。 可将结构类型强制转换为接口类型;这将导致“装箱”操作,以将结构包装在托管堆上的引用类型对象内。 当将值类型传递到接受 System.Object 作为输入参数的方法时,将发生装箱操作。

    使用 struct 关键字可以创建你自己的自定义值类型。 结构通常用作一小组相关变量的容器,如以下示例所示

    public struct CoOrds
    {
        public int x, y;
    
        public CoOrds(int p1, int p2)
        {
            x = p1;
            y = p2;
        }
    }

    另一种值类型是枚举枚举定义的是一组已命名的整型常量。

    public enum FileMode
    {
        CreateNew = 1,
        Create = 2,
        Open = 3,
        OpenOrCreate = 4,
        Truncate = 5,
        Append = 6,
    }

    所有枚举从 System.Enum(继承自 System.ValueType)继承。 适用于结构的所有规则也适用于枚举。

    引用类型

    定义为委托、数组或接口的类型是引用类型在运行时,当声明引用类型的变量时,该变量会一直包含值 null,直至使用 new 运算符显式创建对象,或者为该变量分配已经在其他位置使用 new 创建的对象,如下所示:

    MyClass mc = new MyClass();  
    MyClass mc2 = mc;  

    接口必须与实现它的类对象一起初始化。 如果 MyClass 实现 IMyInterface,则按以下示例所示创建 IMyInterface 的实例:

    IMyInterface iface = new MyClass();  

    创建对象后,内存会在托管堆上进行分配,并且变量只保留对对象位置的引用。 对于托管堆上的类型,在分配内存和 CLR 自动内存管理功能(称为“垃圾回收”)回收内存时都会产生开销。 不过,垃圾回收功能也已经过高度优化,大多数情况下,都不会导致性能问题出现。

    引用类型完全支持继承。 创建类时,可以继承自其他任何未定义为密封的接口或类,而其他类也可以继承自你的类并重写你的虚方法。

    余生很长,愿我们都活成自己喜欢的样子
  • 相关阅读:
    UVA 10617 Again Palindrome
    UVA 10154 Weights and Measures
    UVA 10201 Adventures in Moving Part IV
    UVA 10313 Pay the Price
    UVA 10271 Chopsticks
    Restore DB後設置指引 for maximo
    每行SQL語句加go換行
    种服务器角色所拥有的权限
    Framework X support IPV6?
    模擬DeadLock
  • 原文地址:https://www.cnblogs.com/bananana/p/8708858.html
Copyright © 2011-2022 走看看