首页 > 编程语言 >3_关于c#中类的初步认识

3_关于c#中类的初步认识

时间:2023-12-28 14:59:25浏览次数:26  
标签:Menu2 c# 初步 int 实例 TheRealValue C1 public 中类

关于C#中类的认识

静态字段 static

静态字段被类的所有实例共享,所有实例都访问内存同一内存位置,因此,如果该内存位置的值一旦被某个实例改变了,这种改变对所有的实例都可见。我们可以使用static关键字来将字段声明为静态,如:

namespace Hello
{
    internal class Program
    {
        static void Main(string[] args)
        {
            D d1 = new D();
            d1.Menu1 = 1;
            D.Menu2 = 100;
            D d2 = new D();
            d2.Menu1 = 10;
            Console.WriteLine($"d1's Menu1 is {d1.Menu1} and d1's Menu2 is {D.Menu2}");
            Console.WriteLine($"d2's Menu1 is {d1.Menu1} and d2's Menu2 is {D.Menu2}");
        }
    }

    class D
    {
        public int Menu1;
        public static int Menu2;
    }
}

在上面的额代码中,无论创建了多少个D的实例,其Menu2始终是保持一致的,但是各个实例的Menu1则是不同的。对于静态字段的额使用,我们可以直接这样使用:类名.静态字段

关于静态成员的生命周期

静态成员和实例成员的生命周期是不同的。

  • 对于实例成员来讲,只有在实例被创建后才会产生实例成员,伴随着实例对象的销毁实例成员也会被销毁。
  • 对于静态成员来讲,不管该类有没有实例,该类始终都会有静态成员,并且可以访问。如下所示:
namespace Hello
{
    internal class Program
    {
        static void Main(string[] args)
        {
            D.Menu2 = 200;
            Console.WriteLine($"D's Menu2 is {D.Menu2}");
        }
    }

    class D
    {
        public int Menu1;
        public static int Menu2;
    }
}

关于类的属性声明和访问器

set和get访问器都有预定的语法和语义。可以把set访问器想象成一个方法,但有一个单独的参数,它“设置”属性的值。get访问器没有参数并返回一个值。

  • set访问器:
    • 拥有一个独立的、隐式的参数,名称为value,与属性的类型相同;
    • 拥有一个返回类型void
  • get访问器:
    • 没有参数;
    • 拥有一个与属性类型相同的返回类型。

如下图所示:

namespace Hello
{
    internal class Program
    {
        static void Main(string[] args)
        {
            C1 c = new C1();
            c.TheRealValue = 10;
            Console.WriteLine(c.TheRealValue);
        }
    }

    class C1
    {
        private int theRealValue;
        public int TheRealValue 	//暴漏对私有成员访问的接口
        {
            set
            {
                theRealValue = value;
            }
            get
            {
                return theRealValue;
            }
        }

    }
}

自动实现属性

因为属性经常要被关联到相关字段,所以C#提供了自动实现属性,允许只声明属性而不声明后备字段。编译器会自动的创建隐藏的后备字段以及自动挂载到get和set访问器上。如下图实例所示:

namespace Hello
{
    internal class Program
    {
        static void Main(string[] args)
        {
            C1 c = new C1();
            c.TheRealValue = 10;
            Console.WriteLine(c.TheRealValue);
        }
    }

    class C1
    {
        private int theRealValue;
        public int TheRealValue { get; set; }
    }
}

实例构造函数

实例构造函数是一个特殊的方法,它在创建类的每个新实例时候执行。注意要将构造函数声明为public,构造函数名称和类名一致,且没有返回值。

默认情况下编译器自带一个无参数的构造方法,我们也可以定义多个构造方法。

using System.Runtime.CompilerServices;

namespace Hello
{
    internal class Program
    {
        static void Main(string[] args)
        {
            C1 c1 = new C1();
            Console.WriteLine(c1.TheRealValue);
            C1 c2 = new C1(90);
            Console.WriteLine(c2.TheRealValue);
        }
    }

    class C1
    {
        public int TheRealValue;

        public C1()
        {
            TheRealValue = 10;
        }

        public C1(int TheRealValue)
        {
            this.TheRealValue = TheRealValue;
        }
    }
}

标签:Menu2,c#,初步,int,实例,TheRealValue,C1,public,中类
From: https://www.cnblogs.com/lilyflower/p/17932697.html

相关文章

  • cpu高的问题排查
    问题背景中小件装卸服务uat时,cpu报99,想到是新接了的mq,于是将接mq改为只打印日志,cpu恢复正常由于业务正在进行uat验证,所以没有办法排查,只能等到夜深人静没人用的时候将逻辑都打开,让机器报警排查问题 一开始是觉得mq的数据太多接不过来,于是给uat的机器进行扩容,发现每个机器的c......
  • DC电源模块的维护与故障排除包括以下几个方面
    DC电源模块的维护与故障排除包括以下几个方面:1.定期清洁:定期清洁电源模块的外部和内部部件,可以使用压缩空气或吹尘器进行清理。同时,还需要检查电源模块的风扇是否正常运转,如果存在异常需要及时清理或更换。2.确保通风和散热:电源模块在工作过程中会产生热量,为了保证其正常运行,......
  • 如何在华为云欧拉系统 ECS 实例新建私有 REPO 源并制作安全 RPM 包
    写在前面工作中遇到,简单整理博文内容为华为云开发者认证实验笔记理解不足小伙伴帮忙指正对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对大众理想的懦弱回归,是随波逐流,是对内心的恐惧——赫尔曼·......
  • 【C++】使用指针,动态多维数组
    二维数组intm=3,n=2;int**arr;//动态创建二维数组[3][2]arr=newint*[m];//这里是mfor(inti=0;i<m;i++){ arr[i]=newint[n];//这里是n}三维数组intx=3,y=4,z=5;//arr[3][4][5]int***arr;arr=newint**[x];for(inti=0;i<x;i++){......
  • 如何写出高效清晰的嵌入式C程序
    作为嵌入式工程师,怎么写出效率高、思路清晰的C语言程序呢?要用C语言的思维方式来进行程序的构架构建要有良好的C语言算法基础,以此来实现程序的逻辑构架灵活运用C语言的指针操作虽然看起来以上的说法很抽象,给人如坠雾里的感觉,其实就是用C语言进行遇到问题、分析问题和解决问题的过程......
  • CLIP 对比预训练 + 文字图像相似度:离奇调查,如何训练视觉大模型?
    CLIP:如何训练视觉大模型?对比预训练图像编码器文本编码器最大的亮点:zero-shot图像分类 CLIP论文地址:https://arxiv.org/pdf/2103.00020.pdfCLIP=对比学习+预训练+文字图像相似度。对比预训练传统方法训练视觉模型的方式通常是使用有监督学习方法,需要收集大量图像和对应标签......
  • Nacos修改内存大小
    一、存在的问题部署好的nacos老是挂掉,查看内存发现,所剩内存不多,而nacos运行时内存可以达到1G多,怎么能够设置nacos的内存呢。nacos的启动文件,startup.sh中有如下参数配置  standalone:表示单机模式运行,非集群模式-Xms:设定程序启动时占用内存大小-Xmx:设定程序运行期间最大......
  • [C++ 从入门到精通] 17.基类与派生类关系的详细再探讨
    文章预览:一.派生类对象模型简述二.派生类构造函数三.既当父类又当子类(多继承)四.不想当基类的类final五.静态类型与动态类型六.派生类向基类的隐式类型转换七.父类子类之间的拷贝与赋值一.派生类对象模型简述若一个类,继承自一个父类(基类),那么该类称之为子类(派生类)。并且该......
  • [C++ 从入门到精通] 18.左值、右值,左值引用、右值引用、move
    文章预览:一.左值和右值二.引用分类三.左值引用(1个地址符&)四.右值引用(2个地址符&)五.std::move函数一.左值和右值inti;//赋值语句i=20;//左值:i(int类型的对象,代表一块内存区域),右值:20(代表一个值)左值(左值表达式):能用在赋值语句等号左侧的东西,就称之为左值。它能够代表一个......
  • Docker实现原理学习
    Docker实现原理学习Namespaces命名空间(namespaces)是Linux为我们提供的用于分离进程树、网络接口、挂载点以及进程间通信等资源的方法。在日常使用Linux或者macOS时,我们并没有运行多个完全分离的服务器的需要,但是如果我们在服务器上启动了多个服务,这些服务其实会相互......