C#学习笔记7:C#面向对象编程方法(1)

news2024/11/27 18:40:15

今日继续我的C#学习笔记

主要用实际代码编程来学习研究C#面向对象的编程方法:直接看代码及注释即可:

目录

1、对类与对象概念的快速认知:

2、类和对象成员访问控制:

3、类的构造函数和析构函数:

4、类的属性:

5、类的继承重载与多态:


1、对类与对象概念的快速认知:

创建一个C#控制台应用程序OOExample,在其中编写一个Person类,在Person类中定义相应的属性与方法,最后实例化Person类,输出相应信息

1、类的定义与创建

2、私有成员定义与方法

3、成员变量定义及运用

 代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

/*
 * 创建一个C#控制台应用程序OOExample,在其中编写一个Person类,
 *在Person类中定义相应的属性与方法,最后实例化Person类,输出相应信息
 */

namespace OOExample
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Person Person1 = new Person(); //用new实例化Person得到Person1
            //分别调用Person1的各个方法成员
            Person1.set("张三","男","20");//初始化Person1的个人信息方法
            Person1.show();//输出Person1的个人信息方法
            Person1.eat("Apple");//输出想吃的苹果的信息
            Console.ReadLine();//等待输入用于屏幕暂停
        }

        public class Person//定义Person类
        {
            private string name;//私有成员变量name
            private string sex;//私有成员变量sex
            private string age;//私有成员变量age

            //成员方法set,用于设置某个人姓名,性别,年龄
            public void set(string namein,string sexin,string agein)
            {
                name = namein;
                sex = sexin;
                age = agein;
            }
            //成员方法show,用于输出某个人姓名、年龄、性别具体信息
            public void show()
            {
                Console.WriteLine("姓名:{0}\n性别:{1}\n年龄:{2}\n",name,sex,age);
            }
            //成员方法eat ,用于输出想吃的食物信息
            public void eat(string sth)
            {
                Console.WriteLine("我想吃:{0}",sth);
            }
        }
    }
}

运行结果:

2、类和对象成员访问控制:

写一控制台程序(关于成员访问控制及各种修饰符作用),从程序中分析访问控制权限

(1)public:

用这种修饰符修饰的成员称为公有成员。公有成员允许该类和其他类中的所有
成员访问。

(2)private:

用这种修饰符修饰的成员称为私有成员。私有成员只能被该类中的其他成员访问,其他类(包括派生类)中的成员是不允许直接访问的。在C#中private是默认的修饰符。

(3)protected:

用这种修饰符修饰的成员称为保护成员。保护成员可以被该类和其派生类中的成员访问,而其他类中的成员则不允许访问。


(4)interna:

用这种修饰符修饰的成员称为内部成员。内部成员只能被程序集内的类的成员访问,而程序集外的类(包括派生类)的成员是不允许访问的。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Fcontrol
{
    internal class Program
    {
        static void Main(string[] args)
        {
            first F = new first();
            F.pub = "main set first class public";//正确,允许访问其他类中的公有成员
            //F.pro = "main set first class protected";//错误,不允许访问其他类中保护成员
            //F.pri = "main set first class private";//错误,不允许访问其他类中的私有成员
        }

        //基础类first
        class first
        {
            public string pub;//公有成员
            protected string pro;//保护成员
            private string pri;//私有成员

            void fun()
            {
                pub = "public in first";//正确;允许访问本类中公有成员
                pro = "protected in first";//正确;允许访问本类中保护成员
                pri = "privatr in first";//正确;允许访问本类中私有成员
            }
        }

        //类second继承了基础类first
        class second :first
        {
            void fun1()
            {
                base.pub = "second set first class public";//正确;允许访问基类中公有成员
                base.pro = "second set first class protected";//正确;允许访问基类中保护成员
                //base.pri = "second set first class private";//错误;不允许访问基类中私有成员
            }
        }
    }
}

3、类的构造函数和析构函数:

创建控制台应用程序,使用构造函数,从程序结果分析中体会构造函数的使用

(1)构造函数的名称必须与类名同名,不允许有返回类型,要使用public修饰符修饰,否则在非派生类中不能调用它来创建对象。而一般方法不能和类名相同。
(2)构造函数的功能主要用于在类的对象创建时定义初始化状态。没有返回值,也不能用void 来修饰。
(3)一个类可以定义多个构造函数,成为构造函数的重载,但是重载的构造函数与重载的函数一样,其参数列表必须有所不同(参数个数不同或者参数类型不同)。
(4)构造函数不能直接被调用,必须通过new运算符在创建对象时才会自动调用。
(5)在定义类时,如果没有显式定义构造函数,则实例化对象时会自动调用默认的构造函数。如果一旦定义了构造函数,则默认构造函数不会被调用。默认构造函数的作用是将对象成员的析始值设置为默认的值,如数值类型变量被初始化为0,字符电型变量被初始化为(空值),字符类型变量被初始化为空格等

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace gouzaoxigou
{
    internal class Program
    {
        static void Main(string[] args)
        {
            A a1 = new A();//调用无参数构造函数
            a1.fun();

            A a2 = new A("张三");//调用一个参数构造函数
            a2.fun();

            A a3 = new A("张三", 20);//调用俩个参数构造函数
            a3.fun();

            Console.ReadLine();
        }

    }

    class A
    {
        string name;
        int age;

        //无参数构造函数
        public A() { }
        //一个参数构造函数
        public A(string name)
        {
            this.name = name;  
        }
        //俩个参数构造函数
        public A(string name, int age)
        {
            this.name = name;
            this.age = age;
        }

        public void fun()
        {
            Console.WriteLine("姓名:{0}  年龄:{1}",name,age);
        }
    }

}

4、类的属性:

 类还有一种特殊的成员称为属性,既可以被视作一种成员变量,也可以看作是一种成员方法,实际上是对成员变量的一种拓展。

编写控制台应用程序,定义一个类,在类中定义private字段 age 及对应的属性Age,在属性的 set 程序块中编写代码,实现对属性的赋值进行检查。在类中定义一个方法,在Main()方法中实现其调用。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace lei_Attribute
{
    internal class Program
    {

        static void Main(string[] args)
        {
            Human.Age = 30;//通过属性Age给字段age赋值
            Console.WriteLine(Human.Printinfo());//输出字段age的值
            Console.ReadLine();
        }
        class Human
        {
            private static int age;
            //属性的主要作用是对字段的读和写,因此又把属性叫做字段访问器,get为读访问,set为写访问
            public static int Age
            {
                get { return age; }
                set
                {
                    if (value > 0) { age = value; }//如果赋值给age的值大于0则保存
                    else { age = 0; }
                }
            }
            public static int Printinfo() { return age; }
        }

    }


}

 

5、类的继承重载与多态:

类的重要特征之一就是类的继承。继承是指一个类可以维承另一个类中的相关成员,被继承的类称为基类,继承而形成的类称为派生类。如果一个派生类继承一个基类,那么这个派生类会从其基类中维承得到所有的操作、属性、特征、事件,而基类中的实例构造函数、析构函数则不会被继承。
继承是指一个派生类或子类能够直接获得基类或父类已有的性和方法,不需要重复定义。继承具有传递性,但C#只支持单继承,也就是说一个类最多只允许从一个父类中派生,即只能有一个父类,但一个父类可以派生出多个子类。继承的语法格式为:

class 基类名
{
    成员;
}
class 派生类名:基类名
{
    成员;
}

创建控制台程序,通过在类中分别定义不同作用域的字段变量,并访问这些字段,来分析类、子类的作用域

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.AccessControl;
using System.Text;
using System.Threading.Tasks;

namespace lei_BclassD_jicheng
{
    internal class Program
    {
        static void Main(string[] args)
        {
            B b = new B();
            b.Show();
            b.Shownew();

            Console.ReadLine();
        }

        public class A
        {
            private int priv;
            protected int prot;
            public void Show()
            {
                priv = 20;
                prot = 30;
                Console.WriteLine("private={0} protected={1}",priv,prot);
                Console.WriteLine("父类内容");
            }
        }

        public class B : A 
        {
            public void Shownew()
            {
                //priv=40;//错误写法:父类中的private私有类在子类不可访问
                prot = 50;//对,父类中protected保护类在子类可以访问
                Console.WriteLine("protected={0}",prot);
                Console.WriteLine("子类内容");
            }
        }
    }
}

 

 

 

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

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

相关文章

GaussDB云数据库极简版安装与使用-新手指南

一、前言 作为一款领先的企业级数据库管理系统,GaussDB 提供了强大的性能、高度可靠性和丰富的功能,是企业构建可靠、高性能的数据库解决方案的理想选择。 本文主要针对高校和个人测试环境,介绍极简版安装和使用过程,更加适合高…

git 修改历史 commit message

目录 1,修改当前的2,修改历史的1,先查看 log2,开始修改 3,其他注意点1,中途不想修改了2,commit ID 会发生变化3,推送远程4,精准定位 1,修改当前的 直接使用下…

Netty核心原理剖析与RPC实践11-15

Netty核心原理剖析与RPC实践11-15 11 另起炉灶:Netty 数据传输载体 ByteBuf 详解 在学习编解码章节的过程中,我们看到 Netty 大量使用了自己实现的 ByteBuf 工具类,ByteBuf 是 Netty 的数据容器,所有网络通信中字节流的传输都是…

哥哥张国荣逝世21年,唐唐继续发文怀念

一代巨星张国荣(哥哥)在21年前的愚人节(2003年4月1日)从香港文华东方酒店一跃而下,终年46岁,当年他的离开令很多歌迷影迷都感到悲痛,当中亦包括了他…… 他就是唐鹤德(唐唐&#xff…

FPGA高端图像处理开发板-->鲲叔4EV:12G-SDI、4K HDMI2.0、MIPI等接口谁敢与我争锋?

目录 前言鲲叔4EV----高端FPGA图像处理开发板核心板描述底板描述配套例程源码描述配套服务描述开发板测试视频演示开发板获取 前言 在CSDN写博客传播FPGA开发经验已经一年多了,帮助了不少人,也得罪了不少人,有的人用我的代码赢得了某些比赛、…

SpringBoot整合Netty整合WebSocket-带参认证

文章目录 一. VectorNettyApplication启动类配置二.WebSocketServerBoot初始化服务端Netty三. WebsocketServerChannelInitializer初始化服务端Netty读写处理器四.initParamHandler处理器-去参websocket识别五.MessageHandler核心业务处理类-采用工厂策略模式5.1 策略上下文 六…

【C语言】联合和枚举

个人主页点这里~ 联合和枚举 一、联合体1、联合体类型的声明2、联合体成员的特点3、与结构体对比4、计算联合体大小 二、枚举1、枚举的声明2、枚举的优点3、枚举类型的使用 一、联合体 1、联合体类型的声明 联合体的定义与结构体相似,但是联合体往往会节省更多的空…

分布式光伏电力监控系统解决方案

安科瑞薛瑶瑶18701709087 分布式光伏现状 自发自用、余电上网模式 完全自发自用(防逆流)模式 全额上网模式 0.4kV并网系统 此图为车间新建屋顶分布式光伏发电项目,建设装机容量为1103.46kWp。组件采用单晶硅功率515Wp及550Wp组件&#xff…

文献学习-25-综合学习和适应性教学:用于病理性胶质瘤分级的多模态知识蒸馏

Comprehensive learning and adaptive teaching: Distilling multi-modal knowledge for pathological glioma grading Authors: Xiaohan Xing , Meilu Zhu , Zhen Chen , Yixuan Yuan Source: Medical Image Analysis 91 (2024) 102990 Key words: 知识蒸馏、模态缺失、胶质瘤…

js实现简单的添加移除水印效果

一、实现场景 在做某些内部管理系统时,需求可能要求增加水印,水印内容通常可能是logo或者用户名手机号。实现效果如图: 以下步骤可实现简单添加或者移除水印,并且可以自定义样式、旋转角度等。 二、实现方式 1、先新建一个js…

期权定价模型有哪些?

常见的期权定价模型有BSM模型、二叉树模型以及蒙特卡洛定价模型。 BS模型 在一系列的假设条件下,该模型将期权的价值表示成为标的资产价格、行权价格、无风险利率、期权剩余期限和标的资产波动率的函数。即一旦定量的给出上述5个影响因子的数值,就可以…

鸿蒙OS开发实例:【ArkTS类库多线程CPU密集型任务TaskPool】

CPU密集型任务是指需要占用系统资源处理大量计算能力的任务,需要长时间运行,这段时间会阻塞线程其它事件的处理,不适宜放在主线程进行。例如图像处理、视频编码、数据分析等。 基于多线程并发机制处理CPU密集型任务可以提高CPU利用率&#x…

【PFA树脂交换柱】实验室高纯PFA材质过滤柱耐受电子级氢氟酸含氟树脂层析柱

PFA离子交换柱,也叫PFA层析柱、PFA过滤柱等,其原理是利用吸附剂对不同化合物有不同吸附作用和不同化合物在溶剂中的不同溶解度,用适应溶剂使混合物在填有吸附剂的柱内通过,使复杂的混合物达到分离和提纯的目的。 柱体为透明PFA材…

Linux:运营商在网络中扮演的角色

文章目录 ip目前的问题ip目前的几种解决方案私有ipVS公有ip运营商再谈ip划分运营商的角度看ip 本篇总结的是运营商在网络中扮演的角色 ip目前的问题 在目前看来,ip最大的问题是ip号不够用了,那这个问题如何解决呢? 在之前的内容中有子网掩…

【GlobalMapper精品教程】073:像素到点(Pixels-to-Points)从无人机图像轻松生成点云

文章目录 一、工具介绍二、生成点云三、生成正射四、生成3D模型五、注意事项一、工具介绍 Global Mapper v19引入的新的像素到点工具使用摄影测量原理,从重叠图像生成高密度点云、正射影像及三维模型。它使LiDAR模块成为已经功能很强大的的必备Global Mapper扩展功能。 打开…

BabyAGI源码解读(1)-主体配置部分

1. BabyAGI概览 babyAGI是一个AI驱动的任务管理系统,其中babyagi.py脚本中定义了整个的流程,使用OpenAI的NLP能力根据目标创建新的任务,使用Chroma和Weaviate作为上下文存储和获取任务结果。 babyAGI实际上是一个死循环,它执行以…

每日一题(力扣136):只出现一次的数字

利用哈希&#xff1a;时间复杂度O(n)&#xff0c;空间复杂度O(n) class Solution { public:int singleNumber(vector<int>& nums) {if (nums.size() 1){return nums[0];}unordered_map<int, int> map;int len nums.size();for (int i 0; i < len; i){if…

计算机视觉的技术领域

计算机视觉是一门研究如何使计算机能够“看”和理解图像和视频的科学。它结合了图像处理、模式识别、机器学习、人工智能等多个领域的技术。以下是计算机视觉中的一些关键技术领域。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. …

梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码

源码简介 最新梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码下载 梨花带雨播放器基于thinkphp6开发的XPlayerHTML5网页播放器前台控制面板,支持多音乐平台音乐解析。二开内容&#xff1a;修复播放器接口问题&#xff0c;把接口本地化&#xff0c;但是集成外链播放器…

【C++】 vector <string> 的超详细解析!!!

目录 一、前言 二、 vector <string> 的个人理解和总结 三、vector <string> 的初始化 四、vector <string> 的输入 \ 输出 五、vector <string> 中的注意事项 六、常考面试题 七、共勉 一、前言 在【C】中&#xff0c;vector 是一个动态数组…