zoukankan      html  css  js  c++  java
  • C# 类的初步认识

    基础语法

    [访问修饰符][修饰符] class 类名{
        字段;
        属性;
        方法;
    }
    

    实例化一个对象

    classStudy myInfo = new classStudy(); // 生成一个对象
    myInfo.Age = 18; // 设置字段
    myInfo.Name = "lddragon";
    myInfo.GetNameAndAge(); // 使用对象方法
    

    1 修饰符

    1 类的访问修饰符主要有两个,即 internal public,如果省略了访问修饰符,即为 internal

    2 用 internal 或者不写时代表只能在当前项目中访问类;public 则代表可以在任何项目中访问

    类中成员的访问修饰符有 4 个,具体用法如下。

    1 public

    成员可以被任何代码访问。

    2 private

    成员仅能被同一个类中的代码访问,如果在类成员前未使用任何访问修饰 符,则默认为private

    3 internal

    成员仅能被同一个项目中的代码访问。

    4 protected

    成员只能由类或派生类中的代码访问。派生类是在继承中涉及的,将在后面详细介绍。

    2 字段

    1 字段的定义与前面介绍的变量和常量的定义类似,只是在变量或常量前面可以加上访问修饰符、修饰符。

    2 在修饰字段时通常用两个修饰符,即readonly (只读)和static (静态的)。

    ​ 使用 readonly 修饰字段意味着只能读取该字段的值而不能给字段赋值。

    ​ 使用 static 修饰的字段是静态字段,可以直接通过类名访问该字段。

    private int id;                         //定义私有的整型字段 id
    public readonly string name;            //定义公有的只读字符串类型字段 name
    internal static int age;                //定义内部的静态的整型字段 age
    private const string major = "计算机";  //定义私有的字符串类型常量 major
    

    字段在类中定义完成后,在类加载时,会自动为字段赋值,不同数据类型的字段默认值不同, 如下表所示。

    数据类型 默认值
    整数类型 0
    浮点型 0
    字符串类型 空值
    字符型 a
    布尔型 False
    其他引用类型 空值

    3 方法的定义

    定义

    访问修饰符    修饰符    返回值类型    方法名(参数列表)
    {
        语句块;
    }
    

    1) 访问修饰符

    所有类成员访问修饰符都可以使用,如果省略访问修饰符,默认是 private。

    2) 修饰符

    在定义方法时修饰符包括 virtual(虚拟的)、abstract(抽象的)、override(重写的)、static(静态的)、sealed(密封的)。override 是在类之间继承时使用的。

    3) 返回值类型

    用于在调用方法后得到返回结果,返回值可以是任意的数据类型,如果指定了返回值类型,必须使用 return 关键字返回一个与之类型匹配的值。如果没有指定返回值类型,必须使用 void 关键字表示没有返回值。

    4) 方法名

    对方法所实现功能的描述。方法名的命名是以 Pascal 命名法为规范的。

    5)参数列表

    在方法中允许有 0 到多个参数,如果没有指定参数也要保留参数列表的小括号。参数的定义形式是“数据类型参数名”,如果使用多个参数,多个参数之间需要用逗号隔开。

    4 属性操作

    class classStudy
    {
        // 1 字段
        private int _age;
        private string _name;
    
        // 2 属性
        // 属性的存在就是为了保护字段,对字段的赋值与取值做限制
        public int Age
        {
            get { return this._age; }
            set {
                // 限制Age
                if (value<0|value>100)
                {
                    value = 18;
                }
                _age = value; 
            }
        }
    
        private string Name
        {
            get { 
                // 限制Name
                if(this._name != 'lddragon')
                {
                    return this._name = "xxx";
                }
                return this._name; 
            }
            set { _name = value; }
        }
    
        // 3 方法
        public void GetNameAndAge()
        {
            Console.WriteLine("我今年{0}了,我叫{1}", this.Age, this.Name);
        }
    }
    

    通过上面的实例可以看出,在定义字段属性时,属性的作用就是为字段提供 get、set 访问器,由于操作都比较类似,在 C# 语言中可以将属性的定义简化成如下写法。

    public int Id{get; set;}
    public string Name{get; set;}
    public double Price{get; set;}
    

    如果使用上面的方法来设置属性,则不需要先指定字段。如果要使用自动属性的方式来设置属性表示只读属性,直接省略 set 访问器即可。只读属性可以写成如下形式。

    public int Id{get;}=1;
    

    5 静态与非静态

    // 静态
    1.静态类不能被实例化
    2.静态类中的所有都是静态的
    3.静态使用 类名.方法/属性
    4.类中的静态方法只能访问静态属性
    // 非静态
    1.非静态使用: 对象名.方法
    2.类中静态和非静态都能访问
    

    1 如果你想把你的类当成工具类:可以使用静态类

    2 静态类在整个项目中是资源共享的

    6 构造函数

    作用: 帮助我们初始化对象(给每一个属性都依次的赋值)

    构造函数是一个特殊的方法
    	1.构造函数没有返回值,连void都没有
    	2.构造函数的名称一定要和类名一样的
    
    // 构造函数
    public classStudy(string name, int age)
    {
        // 与python中的init一样 创建对象时执行
        this.Name = name;
        this.Age = age;
    }
    
    classStudy myInfo = new classStudy("lddragon",18); // 生成一个对象
    

    构造函数可以重载

    7 关键字New

    new 帮我们做了三件事
    1.在内存中开辟了一块空间
    2.在开辟的空间中创建对象
    3.调用对象的构造函数进行初始化对象
    

    8 this

    1 代表当前类的对象

    2 在类当中显示的调用本类的构造函数

    // 构造函数
    public classStudy(string name, int age)
    {
        // 与python中的init一样 创建对象时执行
        this.Name = name;
        this.Age = age;
    }
    
    public classStudy(string name):this(name,0) // 方法重载解决带啊冗余
    {
    }
    

    9 析构函数

    ~classStudy(){
        代码块
    }
    // 程序结束的时候才会执行 
    // 帮助我们释放资源
    
    吾虽浪迹,却未迷失本心
  • 相关阅读:
    [好文翻译]保卫你的日历
    如何使用PowerShell修改Host文件
    如何使用PowerShell修改注册表
    MSDN文章纠错Automating Microsoft SharePoint 2010 with Windows PowerShell 2.0 (book excerpt)
    如何在PowerShell中得到一个对象的所有属性名和方法名呢?
    Service Object Model
    记录一个问题的解决方法
    STSADM Sync 命令里的 – Ignoreisactive 标志位
    Javascript实现图片位置控制(鼠标拖拽 + 键盘方向键移动)源码分享
    从零开始学习jQuery (六) AJAX快餐【转】
  • 原文地址:https://www.cnblogs.com/lddragon1/p/15069222.html
Copyright © 2011-2022 走看看