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 自动内存管理功能(称为“垃圾回收”)回收内存时都会产生开销。 不过,垃圾回收功能也已经过高度优化,大多数情况下,都不会导致性能问题出现。

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

    余生很长,愿我们都活成自己喜欢的样子
  • 相关阅读:
    Android杂谈ubuntu系统下adb连接小米2
    Android UI设计ListView的页脚(footer)的使用
    Android杂谈关于Android的nodpi,xhdpi,hdpi,mdpi,ldpi
    ”该证书已被签发机构吊销“错误解决方案
    Android杂谈RelativeLayout中的baseline是什么?
    ubuntu下git更改默认编辑器
    Android UI设计ListView Item的OnItemLongClickListener同时监听两种事件
    Android UI设计ListView的item选中效果
    Ubuntu下ssh服务器文件操作命令
    ubuntu下emacs的配置(cedit,ecb)
  • 原文地址:https://www.cnblogs.com/bananana/p/8708858.html
Copyright © 2011-2022 走看看