http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 14387|回复: 6

[C#基语法] [C#基语法]之C#类和结构你真的都懂了吗?

[复制链接]
发表于 2018-11-27 14:03:09 | 显示全部楼层 |阅读模式
                                                [C#基语法]之C#类和结构你真的都懂了吗?
系列文章导航


  [C#基语法]苏飞传奇版   http://www.sufeinet.com/thread-3091-1-1.html


释义

     和结构实际上都 是创建对象的一个模板,每一个对象都包含相同或者不同的数据,并且提供一系列处理这些数据的方法。类规定每个对象(实例)可以包含什么数据,什么功能。
    例如,如果一个类表示一个学生,我们可以定义字段ClassID,ClassName,Name,Sex用于表示学生的信息。还可以定义处理存储 在这些字段中数据的功能,
然后就可以实例化类的对象,用于表示某个学生,并为实例设置这些字段的值 ,使用其功能。
如下代码
[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace School
{
    /// <summary>
    /// 学生信息类
    /// </summary>
    public class Student
    {
        /// <summary>
        /// 学生班级ID
        /// </summary>
        public int ClassID { get; set; }
        /// <summary>
        /// 班级名
        /// </summary>
        public string ClassName { get; set; }
        /// <summary>
        /// 学生名
        /// </summary>
        public string Name { get; set; }
        /// <summary>
        /// 性别
        /// </summary>
        public string Sex { get; set; }
    }
}


结构与类的本质区别在于它们在内存中的存储方式不同
类-存储 在堆(heap)上的引用类型,而结构是存储在堆栈(stack)上的值类型,关于值类型和引用类型我就不多说了,之前的文章中有提到,大家可以直接去看

大多数情况下类要比结构常用的多

类的成员

      在一个类中我们把类的数据和函数称为类的成员。
我们先来说第一个成员“数据成员
   数据成员主要是指包含了类数据的字段、常量、事件,这个成员可以是静态数据,也可以是实例数据,通常,对于面向对象的语言,类成员总是实例成员,除非用static进行显式声明。
   字段指的是与类相关的变量。
类的成员或者是静态成员 (static member),或者是实例成员 (instance member)。静态成员属于类,实例成员属于对象(类的实例)。
下表提供了类所能包含的成员种类的概述。

成员
说明
常量
与类关联的常数值
字段
类的变量
方法
类可执行的计算和操作
属性
与读写类的命名属性相关联的操作
索引器
与以数组方式索引类的实例相关联的操作
事件
可由类生成的通知
运算符
类所支持的转换和表达式运算符
构造函数
初始化类的实例或类本身所需的操作
析构函数
在永久丢弃类的实例之前执行的操作
类型
类所声明的嵌套类型

可访问性
类的每个成员都有关联的可访问性,它控制能够访问该成员的程序文本区域。有五种可能的可访问性形式。下表概述了这些可访问性。

可访问性
含义
public
访问不受限制
protected
访问仅限于此类和从此类派生的类
internal
访问仅限于此程序
protected internal
访问仅限于此程序和从此类派生的类
private
访问仅限于此类

成员函数和封装
     类的成员函数是一个在类定义中有它的定义或原型的函数,就像其他变量一样。作为类的一个成员,它能在类的任何对象上操作,且能访问该对象的类的所有成员。
成员变量是对象的属性(从设计角度),且它们保持私有来实现封装。这些变量只能使用公共成员函数来访问。
让我们使用上面的概念来设置和获取一个类中不同的类成员的值:
[C#] 纯文本查看 复制代码
using System;
namespace BoxApplication
{
    class Box
    {
       private double length;   // 长度
       private double breadth;  // 宽度
       private double height;   // 高度
       public void setLength( double len )
       {
            length = len;
       }

       public void setBreadth( double bre )
       {
            breadth = bre;
       }

       public void setHeight( double hei )
       {
            height = hei;
       }
       public double getVolume()
       {
           return length * breadth * height;
       }
    }
    class Boxtester
    {
        static void Main(string[] args)
        {
            Box Box1 = new Box();        // 声明 Box1,类型为 Box
            Box Box2 = new Box();         // 声明 Box2,类型为 Box
            double volume;                 // 体积


            // Box1 详述
            Box1.setLength(6.0);
            Box1.setBreadth(7.0);
            Box1.setHeight(5.0);

            // Box2 详述
            Box2.setLength(12.0);
            Box2.setBreadth(13.0);
            Box2.setHeight(10.0);
       
            // Box1 的体积
            volume = Box1.getVolume();
            Console.WriteLine("Box1 的体积: {0}" ,volume);

            // Box2 的体积
            volume = Box2.getVolume();
            Console.WriteLine("Box2 的体积: {0}", volume);
           
            Console.ReadKey();
        }
    }
}

C# 中的析构函数

类的 析构函数 是类的一个特殊的成员函数,当类的对象超出范围时执行。
析构函数的名称是在类的名称前加上一个波浪形(~)作为前缀,它不返回值,也不带任何参数。
析构函数用于在结束程序(比如关闭文件、释放内存等)之前释放资源。析构函数不能继承或重载。
下面的实例说明了析构函数的概念:
[C#] 纯文本查看 复制代码
using System;
namespace LineApplication
{
   class Line
   {
      private double length;   // 线条的长度
      public Line()  // 构造函数
      {
         Console.WriteLine("对象已创建");
      }
      ~Line() //析构函数
      {
         Console.WriteLine("对象已删除");
      }

      public void setLength( double len )
      {
         length = len;
      }
      public double getLength()
      {
         return length;
      }

      static void Main(string[] args)
      {
         Line line = new Line();
         // 设置线条长度
         line.setLength(6.0);
         Console.WriteLine("线条的长度: {0}", line.getLength());           
      }
   }
}



1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
发表于 2018-11-27 14:08:36 | 显示全部楼层
路过学习下, 长知识啦
发表于 2018-11-27 14:09:11 | 显示全部楼层
析构函数 表示没见过撒
 楼主| 发表于 2018-11-27 14:18:40 | 显示全部楼层
发表于 2018-12-16 22:23:05 | 显示全部楼层
感恩无私的分享与奉献
发表于 2020-7-18 16:51:28 | 显示全部楼层
厉害,感谢无私奉献!
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-4-27 12:25

© 2014-2021

快速回复 返回顶部 返回列表