亲,深入理解C#类【01】

来,深入了解一下C#类【01】


:::tips
本文主要介绍类的概念,实例成员及静态成员,深入解析及示例,希望对你理解C#类有点帮助。欢迎微信搜一搜公众号【昆腾码头羊】
:::

1、C#类到底是个啥?

1.1、一个问题:类是干什么用的?
类是一种活动的数据结构:程序的数据和功能被组织为逻辑上相关的数据项和函数的封装集合,并被称为类。

类是一个能存储数据并执行代码的数据结构。它包含数据成员和函数成员;

怎么理解类是一个活动的数据结构呢?可以想象成为房子这个东西:我们准备去买房子,确定要交首付了,那就相当于我们要开始创建类的实例了,那就是你交钱了,就能拿到这个户型的一个副本(具体房间号的套房)。然后我们就可以往这个房子里面,装修,添置家居,住进家人等等。我们添置的储物柜,就是用来存储东西的,就像我们的数据成员。我们买过来的扫地机器人,就像函数成员,能够帮助我们实现扫地的功能。但是你发现:从你买过来这个房子,到10年后,你的房子里面的东西(成员)越来越多,那就好像房子是一个一直在活动的生命体一样(这就好比是活动的结构)。

2、类就是个“家”

根据上面所述,我们知道类是有成员的,就像一个房子一样,里面会有各种各样的东西和事物。类的成员包括:数据成员和函数成员。

【1】数据成员:它存储与类或类的实例相关的数据。数据成员通常模拟该类所表示的现实世界事物的特性。 数据成员有:字段和常量;
【2】函数成员:执行代码,通常会模拟类所表示的现实世界事物的功能和操作。函数成员有:方法,属性,构造函数,析构函数,运算符,索引,事件。

3、“成员小红花”

想起幼儿园,活动中你跳支舞,帮助别的小盆友,通常都能得到一个小红花,这朵小红花别在衣服上面那是一种装饰,让人开心快乐。我们定义类中的成员是,同样也有小红花,就是特性和修改符。我们知道字段是数据保存的实体,类中字段的声明方式通常如下:

[][]【特性】【修饰符】 核心声明;

public static int VarSaveFiled;
// static public int VarSaveFiled;
public static void VarGetValue(){ /* 方法体*/};
public static int VarGetValue()
{ 
    int GetValue;
    /* 方法体*/
    return int GetValue;
};
//【注意】:字段的类型和方法的返回类型不是修饰符,这些是属于核心声明。
//上面public和static两个修饰符,顺序是可以调换的,无关简要!如果加入特性,那就需要写在修饰符前面了。

4、“房子里的东西”–实例成员

前面我们说,类是一个模板,定义好模板,我们创建类的实例,就像我们拿着模板去复制我们想要的东西,跟前面买房子的例子对应:就是我们买到的房子都是某个户型的复制版本一样,就是个副本(打游戏刷副本的感觉);那你拿到你买的户型(房子)之后,就是创建了一个类的实例。我们有了自己的房子,那房子就是一个活动的数据结构了。我们往房子里面添加储物柜,就像我们创建的用来保存数据的字段,我们买个扫地机器人,就像我们创建的方法,可以帮我们实现某种现实的功能,只不过我们抽象了而已。每个类实例拥有自己的类成员,就像我们每家每户都有自己家的东西一样,那每家每户里面的东西,都是这个家的“实例成员”。

一个户型可以在一个小区内,复制出来多套相同户型的房子。同样的我们一个类,也可以创建多个类的实例对象,就像小杨家,小王家一样,都是类模板的副本。但是,我们使用类对象(副本),要知道:一个副本里的成员变化,不会影响另一个副本中成员的值。就像小杨家的油烟机和小王家的油烟机,虽然都是油烟机,但是小杨家是格力的,小王家的可能是老板的,因此小杨家的油烟机对小王家的油烟机不可能有啥影响。

类实例成员代码实例如下:


class Program
{
   static void Main(string[] args)
   {
        Home Home1 = new Home();
        Home Home2 = new Home();
        Home1.HoodName = 10;
        Home2.HoodName = 20;
        Console.WriteLine($"Home1={Home1.HoodName},Home2={Home2.HoodName}");
        Console.ReadLine();
   }
}

class Home
{
    public string HoodName;
}

5、静态字段和访问静态字段

前面我们讲了字段是保存数据的实体,就像我们家里面的储物柜,每个家里面的储物柜存储的东西是不一样的。但是有没有一种可能:我们小区里面有个公共的储物柜,我们大家都可以储存东西,每次储存柜变化了。我们大家取到的都是新变化后的东西,答案是肯定的。静态字段,就是这样一个“公共储物柜”;这个“公共储物柜”在内存中的地址是同一个,而且还有有朵小红花标识(static关键字)这是一个“公共储物柜”;关于静态字段,请大家记住:【同一内存地址,大家公用,一变都变】。

那我们如何访问静态字段呢?【1】我们可以通过类的实例进行访问;【2】我们也可以不创建类的实例,直接通过类.字段名的方式访问。

静态字段是静态成员的一种,还有静态方法,静态属性等。类的实例成员随着实例创建而存在,随着类实例的消亡就消亡了。但是,类的静态成员不一样。即使没有类实例,静态成员也可存在,并且可以被访问。

这说明类的静态成员是跟类相关的,而与类的实例无关。静态字段分配内存的优先级是比类实例成员要高的,算是有点小特权吧。

class Program
{
        static void Main(string[] args)
        {  
          Home home1 = new Home(), home2 = new Home();

            home1.SetLockers("风衣", "枕头");
            home1.Display("home1");

            home2.SetVars("被罩", "床单");//也可以通过实例进行访问
            home2.Display("home2");
            home1.Display("home1");

            Home.Lockers="羽绒服";//可以从类的外部直接通过类名.静态字段名的方式直接访问
            Console.ReadLine();
        }
}
    
class Home
{
   	string Lockers1;
    static string Lockers2;
    public void SetLockers(string var1, string var2)
    {
        Lockers1 = var1;
        Lockers2 = var2;
    }

    public void Display(string str)
    {
        Console.WriteLine($"str={str},Lockers1={Lockers1},Mem2={Lockers2}");
    }
}

6、静态函数:

如同静态字段,静态函数成员独立于任何类实例。即使没有类的实例,仍然可以调用静态方法。静态函数成员不能访问实例成员,但能访问其他静态成员。

静态函数代码示例如下:

class Program
{
   static void Main(string[] args)
   {
       CommonFunction.var = 10;  
       CommonFunction.PrintVarValue();
   }
}
class CommonFunction
{
    static public int var;
    static public void PrintVarValue()
    {
       Console.WriteLine("Value of var: {0}", var);
    }
}

:::tips
作者:软件开发/技术写作者,欢迎微信关注个人公号"昆腾码头羊"(ID: KTMTY101),我们一起探讨有趣的编程历程。
:::
微信搜索.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昆腾码头羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值