zoukankan      html  css  js  c++  java
  • C#第三章--对象和类

    ------------恢复内容开始------------

    1 类和结构

    类和结构实际上都是创建对象的模板,每个对象都包含数据,并提供了处理和访问数据的方法。都用new来声明实例。

    类定义了类的每个对象(实例)可以包含什么数据和功能。

    结构struct是值类型(stack),类class是引用类型(heap),结构不支持继承;较小的数据类型使用结构可提高性能,但类比结构常用。

    2 类

    (1) 类成员

    静态成员,static,属于类

    实例成员,属于对象

    静态字段,static,值对于每个对象相同

    实例字段,每个对象的实例字段都可以有不同的值

    在调用实例方法的实例上,可以通过 this 显式地访问该实例。而在静态方法中引用 this 是错误的。

    https://blog.csdn.net/llll29550242/article/details/6052216?utm_source=blogxgwz1

    (2) readonly与const修饰的字段

    readonly修饰符的字段只能在构造函数中分配值,在运行期间通过构造函数指定只读字段的值;可以是实例成员和类成员;可以在声明时初始化或者采用特定数据类型的默认值;

    const修饰符,编译器通过const,用其值取代了使用它的变量,编译器知道常量的值;只能是类成员;

    (3) 属性

    • 属性是一个方法或者方法对,在客户端代码看来,他们是一个字段。
    • get和set访问器中必须有一个具备属性的访问级别;
    • 省略set即为只读属性,只写属性用方法替代;只读属性初始化:
      • 属性初始化器来初始化 public string Id {get;} ="a";
      • 构造函数中初始化 public Person(string name)=>Name = name;
    • 具有表达式体的属性访问器,即把花括号里的get,set改为:get => _firstName; set => _firstName=value;
    • 表达式体属性:只有get的属性可以用表达式体属性实现,不需要花括号和return,带有get属性但不写get关键字,用lambda操作符。
    public string FirstName{get;}
    public string LastName{get;}
    public string FullName => $"{FirstName} {LastName}";

    (4) 匿名类型

    var doctor = new{ FirstName = "w", LastName = "m"};

    (5) 方法

    • 函数成员不仅包含方法,也包括类或结构的一些非数据成员,如索引器、运算符、构造函数和析构函数,甚至还有属性;数据成员是字段,常量和事件;
    • 方法的重载: 
      • 方法的几个版本有不同的签名,即方法名相同,但参数的个数和数据类型不同。
    public void ReturnResult(int result){};
    public void ReturnResult(int result, int b){};
    • 命名参数,把参数附上参数名称,这样在调用方法的时候不必按照原来的参数顺序填写参数,只需要对应好参数的名称也能完成方法。r.Move(x:1, y:2, z:3);
    • 可选参数,应用可选参数的方法在被调用的时可以选择性的添加需要的参数,而不需要的参数由参数默认值取代。
    public void Test(int numberOne, int numberOne=1, int numberThree=2) {Console.ReadLine();} 
    Test(1); Test(122);
    Test(1,numberThree:3);
    • 个数可变的参数
    public void TestRun(params int[] data){}
    TestRun(1,23,3);
    public void TestRun(params object[] data){}
    TestRun(1,"aa");//可以把不同类型的参数传递进去
    

    (6) 构造函数

    • 与类同名的方法,但没有返回类型;编译器在后台会生成默认的构造函数,把成员函数初始化为标准的默认值;
    • 静态构造函数
      • 只执行一次,没有访问修饰符(public等),没有参数;
      • 可以用来初始化静态字段和属性;通常在第一次调用类的任何成员之前执行静态构造函数;static Person(){//};

    3 结构

    • 结构实际上是把数据项组合在一起,所以大多数字段都声明为public。
    public struct Dimensions
    {
        public Dimensions(double length, double width)
        {
            Length = length;
            Width = width;
        }
        public double Length { get; }
        public double Width { get; }
    }
    • 结构是值类型,但语法上常常把他们当作类来处理。new调用相应的构造函数,根据传递的参数,初始化所有字段。
    • 结构A=B,所有内容被赋值,而对于类,只复制引用;用ref修饰结构,传参,只传递结构在内存中的地址,但方法可改变被调用的结构的值。
    • C#7.2用readonly修饰只读结构,可以生成优化的代码,传递结构体时不会复制结构的内容,会使用引用;

    ------------恢复内容结束------------

  • 相关阅读:
    django-filter 使用Filter来筛选你的数据
    Django REST framework
    利用WSGI来部署你的网站
    [GitPython]使用python管理你的git库
    [模拟炉石](三)使用卡牌
    简单说pyglet.event
    [模拟炉石](二)下一步要解决的问题
    [模拟炉石](一)让游戏过程显示到cocos2d中
    docker系列之一:初见docker
    二分查找_递归实现_存在重复元素
  • 原文地址:https://www.cnblogs.com/straight/p/14445648.html
Copyright © 2011-2022 走看看