C#—代码理解知识点(二)

简介: 上回介绍了关于第一章所设计的那些知识点,这次介绍一下第二章所涉及到的代码,以及由代码折射出的知识点!

 上回介绍了关于第一章所设计的那些知识点,这次介绍一下第二章所涉及到的代码,以及由代码折射出的知识点!


<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:24px;">//第二章,声明属性的修饰符,以及调用另一个类的属性和方法
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //创建类中的一个对象
            BankCustomer c;
            //实例化
            c = new BankCustomer();
            //调用并赋值
            c.FirstName = "kang";
            c.LastName = "ma";
            c.Balance = 0.0M;
            c.Deposit(1000.00M);
        }
    }
    public class BankCustomer
    {
        //定义属性
        public string FirstName;
        public string LastName;
        public decimal Balance;
        //定义方法
        public void Deposit(decimal amount)
        {
            this.Balance += amount;
        }
    }
}</span></span>


   这个例子主要讲了如何在一个类中调用另一个类的属性和方法,其中另一个类属性和方法的声明必须是public(公有),如果定义为private(私有)是无法调用的。


<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:24px;">//问题 第二章 面向对象第二小节 Authentic运用
namespace Authentic1
{
    public class TESTMain
    {
        public static void Main()
        {
            Authentic simon = new Authentic();
            bool Done;
            Done = simon.ChangePassword("马 康", "makang");
            if (Done == true)
                Console.WriteLine("password ok");
            else
                Console.WriteLine("错误");
        }
    }
    class Authentic
    {
        //定义私有 密码
        public string Password = "马康";
        //定义boll类型的密码属性
        public bool IsPasswordCorrect(string userPassWord)
        {
            return (Password == userPassWord) ? true : false;
        }
        public bool ChangePassword(string oldPassword, string newPassword)
        {
            if (oldPassword == Password)
            {
                Password = newPassword;
                return true;
            }
            else
                return false;
        }
    }
}</span></span>


   一开始我只写了一个Authentic类,并且一直在这个类中加Main方法,怎么也运行不出来,这次再看这些遗留的问题的时候发现原来需要在另一个类中调用Authentic类的方法以及判断,这也就能很好的说明,我第二次看的时候比第一次看有收获了!

   从以上例子中关于Authentic的运用很明显了,就是用来做判断用的,记得设计模式中会将这些判断都分成每一类中单独的判断,也就是降低代码之间的耦合度了!


<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:24px;">//第二章面向对象,static静态构造函数 可以用this或者base调用基类的构造函数
namespace Bus
{
    public class Bus
    {
        //Static constructor:
        static Bus()
        {
            System.Console.WriteLine("这是一个静态构造函数Bus方法");
        }
        public static void Drive()
        {
            System.Console.WriteLine("这是一个Drive方法.");
        }
    }
    class TestBus
    {
        static void Main()
        {
            Bus.Drive();
        }
    }
}
//最后结果将自动调用Bus类中的Bus方法(自动调用)!</span></span>


   这个例子主要介绍了一下静态构造函数的使用,看着视频中介绍它的定义,总结一下就是:

     1.方法名和类名相同(以上的Bus类名和Bus方法名)。


     2.调用改类中的方法的时候,它就会被优先调用。


     3.不显示调用方法,无法访问返回值(构造函数不返回值)。


     4.构造函数可以用this和base调用和重写。


<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:24px;">//问题第二章,面向对象,方法重写
namespace Basederived
{
    class Base
    {
        public virtual void base1()
        {
            Console.WriteLine("此方法显示定义方法");
        }
    }
    class Derived : Base
    {
        //重写base类中的base1方法
        public override void base1()
        {
            base.base1();
            Console.WriteLine("此方法重写base方法");
        }
        public static void Main()
        {
            Base a = new Derived();
            a.base1();
        }
    }
}</span></span>


   通过这个例子对于方法的重写有些理解了,需要注意的是:


     1.方法重写必须匹配基类中方法的返回值类型和参数,否则就会产生一个编译错误。


<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:24px;">//第二章,面向对象,abstract关键字
namespace abstract1
{
    abstract class ShapesClass
    {
        abstract public int Area();
    }
    class Square : ShapesClass
    {
        int x, y;
        //Not providing an Area method results
        //in a compile-time error.
        public override int Area()
        {
            return x * y;
        }
    }
}</span></span>


   以上例子介绍了abstract关键字,若以此关键字修饰的类,证明此类只能是其他类的基类!将范围缩小,减少耦合度!


<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:24px;">//第二章面向对象,向上转型
namespace consoleApplication1
{
    class program
    {
        static void Main(string[] arge)
        {
            Derive.Test2();
        }
    }
    public class Bass
    {
        public void Test()
        {
            Console.WriteLine("我是基类");
        }
    }
    public class Derive : Bass
    {
        public static void Test2()
        {
            Bass b = new Derive();
            b.Test();
        }
    }
}</span></span>


   这个向上转型例子,将派生类当作基类来使用。


<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:24px;">//第二章 面向对象 播放器  多态
namespace bofang
{
    class program
    {
        static void Main(string[] arge)
        {
            //DVD dvd = new DVD();
            //Console.WriteLine(dvd.PlayVideo());
            //VCD vcd = new VCD();
            //Console.WriteLine(vcd.PlayVideo());
            //调用playvideo()方法
            program tt = new program();
            tt.PlayVideo();
        }
        public void PlayVideo()
        {
            VideoShow vw;
            vw = new DVD();
            Console.WriteLine(vw.PlayVideo());
            vw = new VCD();
            Console.WriteLine(vw.PlayVideo());
        }
    }
    //定义一个播放类
    public abstract class VideoShow
    {
        public abstract string PlayVideo();
    }
    //继承播放类
    public class VCD : VideoShow
    {
        public override string PlayVideo()
        {
            return "正在播放VCD";
        }
    }
    //继承播放类
    public class DVD : VideoShow
    {
        public override string PlayVideo()
        {
            return "正在播放DVD";
        }
    }
}</span></span>


   这个例子介绍了面向对象中多态的运用!


   通过上面的例子,一步步的深入,让我对于面向对象技术的基础了解更加透彻,对于代码的解读理解性更加敏感,在看完第一遍设计模式书,现在看这些代码情切多了,尤其是越往后的例子!以前遗留的问题也都基本解决了,其中的快感,真是无法形容啊!

相关文章
|
2月前
|
缓存 C# Windows
C#程序如何编译成Native代码
【10月更文挑战第15天】在C#中,可以通过.NET Native和第三方工具(如Ngen.exe)将程序编译成Native代码,以提升性能和启动速度。.NET Native适用于UWP应用,而Ngen.exe则通过预编译托管程序集为本地机器代码来加速启动。不过,这些方法也可能增加编译时间和部署复杂度。
157 2
|
4月前
|
C# 开发者 Windows
在VB.NET项目中使用C#编写的代码
在VB.NET项目中使用C#编写的代码
63 0
|
2月前
|
C#
C# 图形验证码实现登录校验代码
C# 图形验证码实现登录校验代码
97 2
|
2月前
|
中间件 数据库连接 API
C#数据分表核心代码
C#数据分表核心代码
43 0
|
4月前
|
物联网 C# Windows
看看如何使用 C# 代码让 MQTT 进行完美通信
看看如何使用 C# 代码让 MQTT 进行完美通信
650 0
|
4月前
|
数据安全/隐私保护 C# UED
利用 Xamarin 开展企业级移动应用开发:从用户登录到客户管理,全面演示C#与Xamarin.Forms构建跨平台CRM应用的实战技巧与代码示例
【8月更文挑战第31天】利用 Xamarin 进行企业级移动应用开发能显著提升效率并确保高质量和高性能。Xamarin 的跨平台特性使得开发者可以通过单一的 C# 代码库构建 iOS、Android 和 Windows 应用,帮助企业快速推出产品并保持一致的用户体验。本文通过一个简单的 CRM 示例应用演示 Xamarin 的使用方法,并提供了具体的代码示例。该应用包括用户登录、客户列表显示和添加新客户等功能。此外,还介绍了如何增强应用的安全性、数据持久化、性能优化及可扩展性,从而构建出功能全面且体验良好的移动应用。
59 0
|
4月前
|
前端开发 开发者 Apache
揭秘Apache Wicket项目结构:如何打造Web应用的钢铁长城,告别混乱代码!
【8月更文挑战第31天】Apache Wicket凭借其组件化设计深受Java Web开发者青睐。本文详细解析了Wicket项目结构,帮助你构建可维护的大型Web应用。通过示例展示了如何使用Maven管理依赖,并组织页面、组件及业务逻辑,确保代码清晰易懂。Wicket提供的页面继承、组件重用等功能进一步增强了项目的可维护性和扩展性。掌握这些技巧,能够显著提升开发效率,构建更稳定的Web应用。
117 0
|
4月前
|
前端开发 程序员 API
从后端到前端的无缝切换:一名C#程序员如何借助Blazor技术实现全栈开发的梦想——深入解析Blazor框架下的Web应用构建之旅,附带实战代码示例与项目配置技巧揭露
【8月更文挑战第31天】本文通过详细步骤和代码示例,介绍了如何利用 Blazor 构建全栈 Web 应用。从创建新的 Blazor WebAssembly 项目开始,逐步演示了前后端分离的服务架构设计,包括 REST API 的设置及 Blazor 组件的数据展示。通过整合前后端逻辑,C# 开发者能够在统一环境中实现高效且一致的全栈开发。Blazor 的引入不仅简化了 Web 应用开发流程,还为习惯于后端开发的程序员提供了进入前端世界的桥梁。
481 0
|
4月前
|
C#
C# 跳过值班时间代码逻辑
C# 跳过值班时间代码逻辑
36 0
|
5月前
|
文字识别 自然语言处理 C#
印刷文字识别使用问题之C#发票识别的代码实例在哪里可以查看
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。