首页 > 编程语言 >C#中的类 class

C#中的类 class

时间:2022-10-16 01:55:05浏览次数:49  
标签:set get C# pro public str class 属性

类的访问修饰符(两种):public internal(默认)
类的成员(方法和变量)访问修饰符(4种):public internal protected private(默认)

1、封装字段与属性

字段为什么用到属性,属性可以对字段进行过滤,比如说,身份证号码,正常变量可以随便乱赋值,而属性就可以限制字段18位。字段默认私有的,需要公有属性给私有字段赋值。
字段和属性的区别:属性不能被传递,字段可以,作用于面向对象,类内部访问可以不需要属性,外部访问必须用属性,比如实体类字段必须定义为属性。

pro p = new();//实例化new:把类变为一个对象叫实例化过程。
Console.WriteLine(p.getStr = "55");

class pro
{
    string str = "11";//在类叫字段,方法中叫变量,没区别
    public string getStr { get { return str; } set { str = value; } } //属性c#5.0以前的语法,用公有属性访问私有字段。
    public string _getStr { get => str; set => str = value; } //简写,注:value是set访问器的关键字,作用是将外部值赋值给私有字段。
    public string __getStr => $"这是6.0的get只读语法{str},适合代码少用。";//和上面一句代码是一样的。不过只有get访问器,没有ste访问器。

    //自动属性:prop+两下tab自动生成后备代码相对应私有字段,C#6以后支持合并
    public int Pi { get;  set; } //属性首字母大写,字段首字母小写。 还可以这样写:{ get;  private set; } 只能当前类设置值。
    public int pi;//字段和属性的区别:字段可以被当做参数传递;属性不可以做参数传递,相当于保护层。 
}

2、构造方法

与类同名且没有返回值,的方法叫,构造方法:实例化对象new的时候自动调用,根据参数调用,作用于初始化类的成员。可以重载但不能有返回值。访问修饰符必须是public
每个类中默认自带一个无参构造。当我们定义了有参构造,无参构造就会消失,如果还需要无参构造时,需要手动写无参构造方法。
this关键字:表示当前类。

pro p = new pro("构造方法传初始化值");//一个括号就表示类的构造函数
//p[0]= "11";
Console.WriteLine(p[0]);

class pro
{
    public pro() { }//构造函数访问修饰符必须是public
    public pro(string str, int i,int a) //当定义了有参构造,默认的无参构造会消失,需要重新写无参构造
    {
        this.str = str;//this指当前类,作用1:当全局变量与局部变量同名,this关键字可以指向类中的全局变量。
        this.i = i;
        this.a = a;
    }
    public pro(string str) : this(str, 0, 0) { }//this作用2:调用多参数的构造函数,方法体不需要写。
    public string str { get; set; }
    public int i { get; set; }  
    public int a { get; set; }

    //this作用3:索引器
    public string this[int index] //可以重载的
    {
        get 
        {
            return index switch
            {
                0=>str,
                1=>i.ToString(),
                2=>a.ToString(),
                _=>"不在制定范围"
            };
        }
        set
        {
            var v = index switch
            {
                0 => str = value,
                _ => "不在制定范围"
            };
        }     
    }
}

3、析构方法

语法:~类名(){ }
作用:回收内存空间,当对象执行结束后执行。并且每个类只能有一个析构方法。

Pro p = new Pro();
class Pro
{ 
    public Pro(){ Console.WriteLine("构造执行前调用,new的时候调用,初始化数据.");}
    ~Pro() { Console.WriteLine("析构方法结束后自动调用,做一些垃圾处理。调用时间不确定。"); }   
}

 

标签:set,get,C#,pro,public,str,class,属性
From: https://www.cnblogs.com/longxinyv/p/16795175.html

相关文章

  • abc142_d(互质共因子个数)
    寻找a和b的互质公因子:a和b的公因子小于等于gcd(a,b)然后互质等价于筛gcd内的质数(公因子是gcd的因数)复杂度O(sqrt(n))#include<bits/stdc++.h>#defineintlonglong#defin......
  • Apache Commons Text远程代码执行漏洞(CVE-2022-42889)分析
    漏洞介绍根据apache官方给出的说明介绍到ApacheCommonsText执行变量插值,允许动态评估和扩展属性的一款工具包,插值的标准格式是"${prefix:name}",其中"prefix"是用于定位o......
  • c语言文本操作
    (视频参考:b站up主:c语言小白进阶之路  c语言文件操作)文件分类:文本文件和二进制文件文本文件:保存的时候,每一个字符对应一个字节二进制文件:按照二进制编码保存的文件......
  • css3文字阴影和盒子阴影
    文字阴影文字阴影的语法格式:text-shadow:水平向右的偏移值向下的偏移值迷糊度阴影的颜色,水平向右的偏移值向下的偏移值迷糊度阴影的颜色;可以有多个阴影,但是......
  • conftest.py文件【控制用例的执行顺序3】
    fixturescope为session级别是可以跨.py模块调用的,也就是当我们有多个.py文件的用例时,如果多个用例只需要调用一次fixture,可以将scope="session",并且写到conftest.py文件......
  • 结合springboot条件注入@ConditionalOnProperty以及@ConfigurationProperties来重构优
    @ConditionalOnProperty实现按需注入bean短信工具类SmsUtilzhenghe-common是一个基础包。SmsUtil坐落在zhenghe-common里。先看看Smsutil的面目。packagecom.emax......
  • javascript: Webcam
     varstop=function(){varstream=video.srcObject;vartracks=stream.getTracks();for(vari=0;i<tracks.length;i++){vartrack=tra......
  • css3中的圆角border-radius
    css3的属性应该加上浏览器前缀不同的浏览器内核不同,因此css的前缀不同。常见的几种浏览器内核火狐浏览器Geoko内核前缀是-mox-谷歌浏览器,Webkit内核......
  • webpack中的加载器
    通过loader打包非js模块:默认情况下,webpack只能打包js文件,如果想要打包非js文件,需要调用loader加载器才能打包loader加载器包含:1).less-loader2).sass-......
  • 2022-10-15 react之umi之connect
    类函数写法:import{connect}from'umi';@connect(({data})=>({id:data.id}))组件函数写法:exportdefaultconnect(({data})=>({id:data......