C#学习笔记22: 面向对象编程入门精讲(上)

简介: C#学习笔记22: 面向对象编程入门精讲

1.1 官方编程文档

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC#\Specifications\2052\CSharp Language Specification.doc

1.2 类与结构

image.png

结构只能定义带参构造函数,不能继承和派生,但可以实现接口

结构中不能实例字段初始值

20190711225709584.png


1.3 引用类型与值类型

类是引用类型

class Program
    {
        static void Main(string[] args)
        {
            person p1 = new person();
            person p2 = p1;
            p1.Name = "Jack";
            p1.Age = 30;
            Console.WriteLine(p2.Name + p2.Age.ToString());
            p1.Name = "Bob";
            p1.Age = 27;
            Console.WriteLine(p2.Name + p2.Age.ToString());
        }
    }
    class person
    {
        public string Name { set; get;}
        public int Age { set; get; }
    }

20190711231648340.png

结构是值类型

    class Program
    {
        static void Main(string[] args)
        {
            person p1 = new person();
            person p2 = p1;
            p1.Name = "Jack";
            p1.Age = 30;
            Console.WriteLine(p2.Name + p2.Age.ToString());
            p1.Name = "Bob";
            p1.Age = 27;
            Console.WriteLine(p2.Name + p2.Age.ToString());
        }
    }
    struct person
    {
        public string Name { set; get;}
        public int Age { set; get; }
    }

20190711231622384.png

20190711231738724.png

引用对象与值对象的总结

20190711231858825.png

1.4 ref参数与out参数

        static void getPerson1(person p)
        {
            p.Name = "Amiee";
            p.Age = 25;
        }
//此版本对参数p的操作会反应到实参中
        static void getPerson2(person p)
        {
            p = new person("Ray", 27);
        }
//此版本在传参数时,参数p指向的实参对象,但是进入函数后,参数p的指向发生了变化,对p参数的操作便不会再反映到实参中

上述两个函数的阐述传递过程如下:

20190712213607899.png

为解决上述问题,引入ref参数和out参数:

ref参数传入前必须初始化,out传入前不用初始化

        static void getPerson3(ref person p)
        {
            p = new person("Ray", 28);
        }
        static void getPerson4(out person p)
        {
            p = new person("Ray", 29);
        }


image.png

均完成了对实参的修改

1.5 方法重载

具有不同返回值的同名方法可重载

具有不同参数个数、参数类型和参数顺序的同名方法

有无ref或out修饰符修饰的同名方法

1.6 静态类与静态成员

静态类的所有成员都必须的是静态的

类的静态成员可用类名直接调用

1.7 继承与多态

(1)可访问性

20190712215357919.png

对internal可访问性的验证见博文https://blog.csdn.net/m1m2m3mmm/article/details/95667772


(2)继承


子类构造时,线调用父类的构造函数再调用自己的构造函数;子类对象被销毁时,先调用自己的析构函数再调用父类的析构函数

在继承时,子类的访问属性不高于父类的访问属性,比如基类是internal则不允许子类被定义为public

(3)覆盖与多态


子类会自动覆盖基类中定义的非virtual关键字修饰的同名方法,但此时直接定义子类对象,调用的是子类的同名方法;若定义指向子类的父类对象,调用的是父类的同名方法;

使用virtual关键字修饰的方法,在被指向子类的基类对象调用时,实际上调用的是子类对象的方法;直接定义子类对象时,调用的是子类自己的同名方法

(4)定义不可被继承的类

sealed class  ClassName
{
};
相关文章
|
27天前
|
开发框架 .NET API
RESTful API 设计与实现:C# 开发者的一分钟入门
【10月更文挑战第5天】本文从零开始,介绍了如何使用 C# 和 ASP.NET Core 设计并实现一个简单的 RESTful API。首先解释了 RESTful API 的概念及其核心原则,然后详细说明了设计 RESTful API 的关键步骤,包括资源识别、URI 设计、HTTP 方法选择、状态码使用和错误处理。最后,通过一个用户管理 API 的示例,演示了如何创建项目、定义模型、实现控制器及运行测试,帮助读者掌握 RESTful API 的开发技巧。
48 7
|
1月前
|
C#
C#入门
C#入门
24 0
|
30天前
|
存储 消息中间件 NoSQL
Redis 入门 - C#.NET Core客户端库六种选择
Redis 入门 - C#.NET Core客户端库六种选择
52 8
|
2月前
|
安全 C#
C# 面向对象编程的三大支柱:封装、继承与多态
【9月更文挑战第17天】在C#中,面向对象编程的三大支柱——封装、继承与多态,对于编写安全、可维护、可复用的代码至关重要。封装通过访问修饰符和属性保护数据;继承允许子类继承父类的属性和方法,实现代码复用和多态;多态则提高了代码的灵活性和通用性。掌握这三大概念能显著提升C#编程能力,优化开发效率和代码质量。
|
1月前
|
C#
C#中的数组型参数学习笔记
C#中的数组型参数学习笔记
25 0
|
2月前
|
设计模式 C# 开发者
C#设计模式入门实战教程
C#设计模式入门实战教程
|
2月前
|
安全 数据库连接 API
C#一分钟浅谈:多线程编程入门
在现代软件开发中,多线程编程对于提升程序响应性和执行效率至关重要。本文从基础概念入手,详细探讨了C#中的多线程技术,包括线程创建、管理及常见问题的解决策略,如线程安全、死锁和资源泄露等,并通过具体示例帮助读者理解和应用这些技巧,适合初学者快速掌握C#多线程编程。
76 0
|
2月前
|
开发框架 .NET Java
C#/.NET/.NET Core自学入门指南
C#/.NET/.NET Core自学入门指南
|
3月前
|
图形学 C# 开发者
全面掌握Unity游戏开发核心技术:C#脚本编程从入门到精通——详解生命周期方法、事件处理与面向对象设计,助你打造高效稳定的互动娱乐体验
【8月更文挑战第31天】Unity 是一款强大的游戏开发平台,支持多种编程语言,其中 C# 最为常用。本文介绍 C# 在 Unity 中的应用,涵盖脚本生命周期、常用函数、事件处理及面向对象编程等核心概念。通过具体示例,展示如何编写有效的 C# 脚本,包括 Start、Update 和 LateUpdate 等生命周期方法,以及碰撞检测和类继承等高级技巧,帮助开发者掌握 Unity 脚本编程基础,提升游戏开发效率。
73 0
|
3月前
|
开发者 iOS开发 C#
Uno Platform 入门超详细指南:从零开始教你打造兼容 Web、Windows、iOS 和 Android 的跨平台应用,轻松掌握 XAML 与 C# 开发技巧,快速上手示例代码助你迈出第一步
【8月更文挑战第31天】Uno Platform 是一个基于 Microsoft .NET 的开源框架,支持使用 C# 和 XAML 构建跨平台应用,适用于 Web(WebAssembly)、Windows、Linux、macOS、iOS 和 Android。它允许开发者共享几乎全部的业务逻辑和 UI 代码,同时保持原生性能。选择 Uno Platform 可以统一开发体验,减少代码重复,降低开发成本。安装时需先配置好 Visual Studio 或 Visual Studio for Mac,并通过 NuGet 或官网下载工具包。
197 0