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>


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


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

相关文章
|
4月前
|
C# Windows
C#通过代码实现快捷键编辑
C#通过代码实现快捷键编辑
|
4月前
|
开发框架 .NET 编译器
C# 10.0中Lambda表达式的改进:更简洁、更灵活的代码编写体验
【1月更文挑战第21天】随着C#语言的不断发展,Lambda表达式作为一种简洁、高效的函数式编程工具,在C# 10.0中迎来了重要的改进。本文将详细探讨C# 10.0中Lambda表达式的新特性,包括参数类型的推断增强、自然类型的Lambda参数以及Lambda表达式的属性改进等。这些改进不仅简化了Lambda表达式的编写过程,还提升了代码的可读性和灵活性,为开发者带来了更优质的编程体验。
|
4月前
|
C# 开发者
C# 10.0中的文件范围命名空间:简化代码组织的新方式
【1月更文挑战第18天】C# 10.0引入了文件范围的命名空间,这是一种新的语法糖,用于更简洁地组织和管理代码。文件范围命名空间允许开发者在每个文件的基础上定义命名空间,而无需显式使用花括号包裹整个文件内容。本文将深入探讨文件范围命名空间的工作原理、使用场景以及它们为C#开发者带来的便利。
|
1月前
|
C# 开发者 Windows
在VB.NET项目中使用C#编写的代码
在VB.NET项目中使用C#编写的代码
35 0
|
17天前
|
数据安全/隐私保护 C# UED
利用 Xamarin 开展企业级移动应用开发:从用户登录到客户管理,全面演示C#与Xamarin.Forms构建跨平台CRM应用的实战技巧与代码示例
【8月更文挑战第31天】利用 Xamarin 进行企业级移动应用开发能显著提升效率并确保高质量和高性能。Xamarin 的跨平台特性使得开发者可以通过单一的 C# 代码库构建 iOS、Android 和 Windows 应用,帮助企业快速推出产品并保持一致的用户体验。本文通过一个简单的 CRM 示例应用演示 Xamarin 的使用方法,并提供了具体的代码示例。该应用包括用户登录、客户列表显示和添加新客户等功能。此外,还介绍了如何增强应用的安全性、数据持久化、性能优化及可扩展性,从而构建出功能全面且体验良好的移动应用。
25 0
|
1月前
|
物联网 C# Windows
看看如何使用 C# 代码让 MQTT 进行完美通信
看看如何使用 C# 代码让 MQTT 进行完美通信
233 0
|
1月前
|
C#
C# 跳过值班时间代码逻辑
C# 跳过值班时间代码逻辑
25 0
|
2月前
|
文字识别 自然语言处理 C#
印刷文字识别使用问题之C#发票识别的代码实例在哪里可以查看
印刷文字识别产品,通常称为OCR(Optical Character Recognition)技术,是一种将图像中的印刷或手写文字转换为机器编码文本的过程。这项技术广泛应用于多个行业和场景中,显著提升文档处理、信息提取和数据录入的效率。以下是印刷文字识别产品的一些典型使用合集。
|
2月前
|
人工智能 开发框架 调度
C#/.NET这些实用的技巧和知识点你都知道吗?
C#/.NET这些实用的技巧和知识点你都知道吗?
|
2月前
|
开发框架 数据可视化 C#