@data 重写set方法_C#中的类、方法和属性

    这节讲C#中的类,方法,属性。这是面向对象编程中,我们最直接打交道的三个结构。

   类:

    类(class)是面向对象中最基本的单元,它是一种抽象,对现实世界中事物的抽象,在C#中使用class关键字声明一个类:

class MyClass{}

    类既然是一个抽象,我们使用的时候就要对其进行实例化,通过new关键字实例化一个类。

MyClass myclass=new MyClass();

     在实例化的同时,我们还可以通过对象初始化器,对类中的属性进行操作。

MyClass myclass=new MyClass(){属性名=属性值}

    这对大括号就是对象初始化器,使用对象初始化器,如果使用的构造方法是无参的,那么初始化器之前的小括号可以省略。

    每个类都有一个构造方法(constructor),构造方法的名字必须跟类名一致(我们实例类的时候就是调用的这个方法),如果不显式声明类的构造方法,系统就会默认生成一个无参的构造方法。

class MyClass{  public MyClass(){}//构造方法}

    我们可以通过构造方法为类中的成员进行初始化,这其实也是构造方法的很重要的用途。

class MyClass{  public bool isReal;  public MyClass(bool isreal){    this.isReal=isreal;  }//构造方法}

    以上代码中出现了一个关键字this,this是指当前对象,只能用在类的内部,以上代码的意思是这个对象的IsReal属性=isreal。

    需要注意的是,在执行类的构造方法之前,会先执行其父类的无参的构造方法,或者,我们指定父类的有参的构造,因为子类继承了父类,在实例化子类的时候,必定要将继承自父类的成员也在内存中创建出来,注意,这并非是实例化父类。

//使用上一节的代码做演示public class Husky : Dog{    public Husky() : base("Husky"){}//访问父类的有参构造,初始化属性}

    除了定义一般的类,我们还可以定义静态类,抽象类,使用static class 声明一个静态类,类中的属性和方法也必须都是静态的。

static class stClass{}

    静态类在内存中只有一份,它不需要实例化,在程序的一开始就自动加载,一般静态类都是作为工具类,拿来即用的。调用静态方法,可以使用静态类名.方法名的形式,也可以使用using引入静态类名,就可以省略静态类名,直接调用方法名。

    使用abstract class 创建一个抽象类,抽象类顾名思义是对类的抽象,抽象类中可以定义抽象方法(抽象方法的定义也是需要加上abstract关键字,抽象方法不能定义为私有的,私有的抽象方法是无意义的),也可以定义非抽象方法,它的作用就是将类中的成员进行抽象,以便更好地实现多态。包含了抽象方法的类必须要定义成抽象类,抽象类只能被继承,不能被实例,它就像一个骨架一样,具体的填充需要交给它的子类。

abstract class IsAbstruct//定义抽象类{    public abstract void Shout ();//定义抽象方法}

    另外,类是可以嵌套的。嵌套的类的作用域就缩小到了外部类的作用域中。

    跟类有关的还有一个原则:单一职责原则(Single Responsibility Principle),单一职责原则讲的是一个类应该只有一个发生变化的原因(动机),可以设想一个情景,开高铁的人没法很好的开汽车,因为两者的工作原理不一样。当一个类服务两个不太相关的业务,那么这个类就拥有多个职责,我们就会有多个动机去改变它,这样的类就违反了单一职责原则。

   方法:

    方法声明在类的内部,它定义了类的行为,声明一个方法,需要三个必要元素:返回值,方法名,方法参数:

void MyMethod(){}//无参,无返回值的方法int MyMethodWithOneRetutn(){return 0;}//无参,返回值为intint MyMethodWithOneArgOneRet(int a){return a+a;}//一个参数,一个返回值

    如果一个方法没有返回值,那么它的返回类型就是void,多个参数之间用逗号隔开。方法还有一些前缀,比如访问修饰符,静态修饰符,重写关键字等等。修饰符默认的是private。

    方法是可以重载的,所谓重载,就是一个类中可以存在相同方法名的方法,C#中,方法名和参数列表组成一个方法签名,重载一个方法,只需要修改方法签名中的参数列表即可。以下是一组重载方法:

public void RelodeOne(int a){}public void RelodeOne(int a, int b){}

    方法的重载,使一个行为,可以有不同的动作,或者说扩展了一个行为的覆盖面。就好比吃饭(方法名),一个人(一个参数)是吃饭,两个人(两个参数)也是吃饭,行为是一样的,但不同的人数吃饭, 做的菜多少也不一样。

    编译器会根据传参的不同调用不同的重载方法。

    关于方法,还有一个知识点,叫方法的重写,它跟继承有关,如果想重写父类的方法,那么父类的方法,就要设置为virtual也就是虚方法,子类重写,需要使用关键字override。如果父类不写virtual,子类在重写时需要加上new关键字,下面演示这两种情况:

class OverFather{        public virtual void isvirtual()        {            Console.WriteLine("我是父类虚方法");        }        public virtual void isold()        {            Console.WriteLine("我是父类老方法");        }}class OverWirteMethods : OverFather{        public void isvirtual()        {            Console.WriteLine("我是子类真方法");        }            public new void isold()        {            Console.WriteLine("我是子类新方法");        }}

    在主方法中调用:

OverWirteMethods o = new OverWirteMethods();o.isvirtual();o.isold();

33900e1c1c1faeccd565f905c23a9e19.png

    属性:

    一个类中,除了方法还有属性,方法用来执行动作,属性用来保存数据。属性是个封装结构,它是对外开放的,类中还有一种私有结构,叫字段,属性就像是一个外壳,包裹着字段,不受非法数据的污染。

    将一个变量设置为私有的,就可将其称之为字段,然后声明一个属性,来访问和修改这个字段。属性通过get,set块来获取和修改数据。

    下面看一个演示:

private bool isFiled;//声明一个字段public bool IsFiled//声明一个属性{    get { return isFiled; }//使用get块获取到字段的值    set { value = isFiled; }//使用set块设置字段的值 value是赋过来的值}

    在get,set块中就可以写一些逻辑,处理数据。如果省略其一,就形成了只读或者只写属性。

    另外,C#5推出了一个新的语法糖:自动属性:以上代码就可以变化为这样:

public bool IsFiled{get;set;}

    自动属性无法对数据做处理,CLR自动生成私有字段,只负责对字段的获取或修改,但可以将get或set块设置为私有的,或者也可以不写get,set,形成只读或只写属性(自我感觉自动属性就是为了少写代码,没啥特殊的)。

    本节到此结束...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472974.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker安装+镜像拉取+容器+创建镜像+push to docker hub

文章目录1. 安装2. 镜像操作3. 容器4. docker hub本文参考:https://zhuanlan.zhihu.com/p/23599229 1. 安装 参考 https://www.runoob.com/docker/ubuntu-docker-install.html curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun测试&#xff…

css 百分比 怎么固定正方形_你未必知道的49个CSS知识点

本文的每一条,都是我曾经发过的掘金沸点,其中有很多条超过了百赞(窃喜)。鉴于时不时有童鞋翻我以前的沸点,因此,本文收集了个人目前发过的所有CSS知识点动图,以便阅读。需要说明的是,顺序仍是按当时发布顺序…

CSS 实现加载动画之五-光盘旋转

今天做的这个动画叫光盘旋转,名字自己取的。动画的效果估计很多人都很熟悉,就是微信朋友圈里的加载动画。做过前面几个动画,发现其实都一个原理,就是如何将动画的元素如何分离出来。这个动画的实现也很简单,关键点在于…

css hover变成手_web前端入门到实战:彻底掌握css动画「transition」

马上就2020年了,不知道小伙伴们今年学习了css3动画了吗?说起来css动画是一个很尬的事,一方面因为公司用css动画比较少,另一方面大部分开发者习惯了用JavaScript来做动画,所以就导致了许多程序员比较排斥来学习css动画(…

用Docker部署TensorFlow Serving服务

文章目录1. 安装 Docker2. 使用 Docker 部署3. 请求服务3.1 手写数字例子3.2 猫狗分类例子参考: https://tf.wiki/zh_hans/deployment/serving.html# https://tensorflow.google.cn/tfx/serving/docker 1. 安装 Docker 以下均为 centos7 环境 参考文章&#xff1a…

K-Means算法和K-Means++算法的聚类

在构成圆形的30000个随机样本点上,设置7个簇,使用K-Means算法聚类 from math import pi, sin, cos from collections import namedtuple from random import random, choice from copy import copy import matplotlib.pyplot as plt import numpy as np…

convert.todatetime指定日期格式_MATLAB的时间与日期

7 日期和时间MATLAB在2014b版本中将日期和时间独立成了一个数据类型,新的版本中对于时间数据的处理功能更为强大。比如datetime和duration等函数,可以支持对时间的高效计算、对比、格式化显示。对这类数组的操作方法和对普通数组的操作是基本一致的。下…

跨设备链路聚合_路由与交换技术(华为设备)第五讲---链路聚合

前言:随着网络规模不断扩大,用户对骨干链路的带宽和可靠性提出了越来越高的要求。在传统技术中,常用更换高速率的接口板或更换支持高速率接口板的设备的方式来增加带宽,但这种方案需要付出高额的费用,而且不够灵活。采…

电影评论分类:二分类问题

根据电影评论的 文字内容将其划分为正面或负面。 使用IMDB 数据集,它包含来自互联网电影数据库(IMDB)的50 000 条严重两极分 化的评论。数据集被分为用于训练的25 000 条评论与用于测试的25 000 条评论,训练集和测试 集都包含50%…

TensorFlow 2.0 - tf.distribute 分布式训练

文章目录1. 单机多卡 MirroredStrategy2. 多机训练 MultiWorkerMirroredStrategy3. TPU 张量处理单元学习于:简单粗暴 TensorFlow 2 1. 单机多卡 MirroredStrategy # 分布式训练 import tensorflow as tf import tensorflow_datasets as tfds# 1 单机多卡 Mirrore…

非抢占式优先级调度算法_华为鸿蒙操作系统内核真面目之抢占式和非抢占式内核...

华为鸿蒙操作系统内核真面目之抢占式和非抢占式内核众所周知华为鸿蒙操作系统内核是Linux内核。而Linux内核即是抢占式内核也是非抢占式内核。设置软件优先级在优先级在0-99之间是抢占式优先级。设置优先级在100-139之间是非抢占式优先级。从华为官方发布的信息--优先级高的任务…

TensorFlow 2.0 - Hub 模型复用

文章目录1. tfhub2. 例子:神经风格转换3. retrain 例子学习于:简单粗暴 TensorFlow 2 1. tfhub 网址: https://hub.tensorflow.google.cn/ https://tfhub.dev/ 可以搜索,下载模型 安装包 pip install tensorflow-hub import…

微服务 注册中心的作用_102,谈谈微服务注册中心zookeeperamp;Eureka

首先,大家要明确一点微服务注册中心是一个重要的组件,解决的是服务的注册和发现的问题,而zookeeper,Eureka都只是其中一款落地实现的产品,再比如Nacos也是如此,所以关键是掌握注册中心的工作原理&#xff0…

文本表示

1 one-hot representation 该单词对应所在元素为1,向量中其他元素均为0,向量的维度就等于词库中的单词数目  所有向量都是互相正交的,我们无法有效的表示两个向量间的相似度  向量维度过大。 from sklearn.feature_extraction.text…

天池 在线编程 课程表(拓扑排序 + 回溯)

文章目录1. 题目2. 解题1. 题目 总共有n个课程,从0到n-1。 有些课程可能有先决条件,例如,你想修课程0,你必须先修一门课程1,这两门课之间的关系表示为:[0,1] 给定课程的总数和先决条件对的列表,返回你可以…

java 父子级json组装不用递归_2020面试阿里Java研发岗题库总结,想虐面试官不能错过的面试宝典...

前言:虽然天猫,蚂蚁金,菜鸟都归属阿里旗下,但每个面试官问的问题都不一样,相同点主要在流程方面。面试开始会让自我介绍,主要业务架构和技术架构两部分。业务架构一般不会深究,但要面试官听明白&#xff0c…

LeetCode 1748. 唯一元素的和

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums 。 数组中唯一元素是那些只出现 恰好一次 的元素。 请你返回 nums 中唯一元素的 和 。 示例 1: 输入:nums [1,2,3,2] 输出:4 解释:唯一元素为 [1,3] ,和为 4…

朵唯机器人怎么连网_平遥古城推出机器人导游 可伴游还可骑行

近日,一组集景点讲解、语音互动等多种功能于一身的机器人亮相平遥古城,引发游客关注。2月27日,北京青年报记者从景区旅游公司处了解到,这批机器人导游已经上岗5天,主要是为了填补下午5点人工导游下班后,古城…

评论数据获取、词频统计、词云图

# coding: utf-8 # In[2]: import urllib.request import re import requests import time import random import json # 设置请求头 headers (User-Agent, Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537…

pytorch 语义分割loss_vedaseg:基于pytorch的开源语义分割工具库,更多模型支持,更易拓展...

加入极市专业CV交流群,与6000来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动!同时提供每月大咖直播分享、真实项目需求对接…