代码无错就是优?简单工厂模式 C#

简介: 还是那几句话:学无止境,精益求精十年河东,十年河西,莫欺少年穷学历代表你的过去,能力代表你的现在,学习代表你的将来废话不多说,直接进入正题:现在给你一道面试题,如下:请用C++,C#,Java或VB.NET等任意一种面向对象语言实现一个计算机控制台程序,要求输入任意两个数字和一个运算符号,得到结果。

还是那几句话:

学无止境,精益求精

十年河东,十年河西,莫欺少年穷

学历代表你的过去,能力代表你的现在,学习代表你的将来

废话不多说,直接进入正题:

现在给你一道面试题,如下:

请用C++,C#,Java或VB.NET等任意一种面向对象语言实现一个计算机控制台程序,要求输入任意两个数字和一个运算符号,得到结果。

你会怎样设计这道程序呢?下面我列举各个面试人员的答卷并作分析(各位看官:看看有没有和你思路一样的答卷):

面试人员菜鸟一的答卷如下:

    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("请输入数字A:");
            string A = Console.ReadLine();

            Console.Write("请输入运算符号B:");
            string B = Console.ReadLine();

            Console.Write("请输入数字C:");
            string C = Console.ReadLine();

            double D=0;
            if (B == "+")
            {
                D = Convert.ToDouble(A) + Convert.ToDouble(C);
            }
            if (B == "-")
            {
                D = Convert.ToDouble(A) - Convert.ToDouble(C);
            }
            if (B == "*")
            {
                D = Convert.ToDouble(A) * Convert.ToDouble(C);
            }
            if (B == "/")
            {
                D = Convert.ToDouble(A) / Convert.ToDouble(C);
            }
            Console.WriteLine("结果为" + D);
            Console.ReadKey();
        }
    }
View Code

针对菜鸟一的代码,我们作如下分析:

1、变量/函数命名不规范

2、判断分支意味着加减乘除四个判断都必须做,使计算机做了三次无用的判断

3、运算除法时,如果被除数为零时,会异常

总之:上述方法易读性差,易维护性差,不可重构,不可复用,不可扩展,不灵活。因此菜鸟一未被公司录用。

.

面试人员菜鸟二的答卷如下:

        static void Main(string[] args)
        {
            Console.Write("请输入数字A:");
            string strNumberA = Console.ReadLine();

            Console.Write("请输入运算符号:");
            string strOperate = Console.ReadLine();

            Console.Write("请输入数字B:");
            string strNumberB = Console.ReadLine();

            double strResult = 0;

            switch (strOperate)
            {
                case "+": strResult = Convert.ToDouble(strNumberA) + Convert.ToDouble(strNumberB); break;
                case "-": strResult = Convert.ToDouble(strNumberA) - Convert.ToDouble(strNumberB); break;
                case "*": strResult = Convert.ToDouble(strNumberA) * Convert.ToDouble(strNumberB); break;
                case "/": if (strNumberB != "0")
                    {
                        strResult = Convert.ToDouble(strNumberA) / Convert.ToDouble(strNumberB);
                    }
                    else
                    {
                        Console.WriteLine("除数不能为零"); Console.ReadKey(); return;
                    }
                    break;
            }
            Console.WriteLine("结果为" + strResult);
            Console.ReadKey();
        }
View Code

 针对菜鸟二的答卷,我们作如下分析:

1、变量/函数命名基本规范

2、判断分支只运行一次

3、除法运算判断了被除数不能为零的情况

虽说基本实现了计算器加减乘数的功能

但是:

出题人的意思是利用面向对象语言设计一道计算器程序,菜鸟二的程序看似完美,但是并没有使用面向对象思想,因此:菜鸟二的面试结果亦是未被录取。

呜呜,那么怎么设计这道程序才能打动面试官呢?

现在我们深入分析菜鸟二的答卷

如下:

 1、业务与输出没有分离

就如同ASP程序和ASP.NET的对比一样。在ASP程序中,页面的HTML代码和业务逻辑CS代码混在一起,看上去十分不舒服,而且容易出错!而,ASP.NET做了输出与业务的分离,也就是Aspx文件和Aspx.cs文件是分开了的!

2、

 

相关文章
|
3月前
|
机器学习/深度学习 算法 定位技术
Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现裂缝的检测识别(C#代码UI界面版)
本项目基于YOLOv8模型与C#界面,结合Baumer工业相机,实现裂缝的高效检测识别。支持图像、视频及摄像头输入,具备高精度与实时性,适用于桥梁、路面、隧道等多种工业场景。
352 27
|
4月前
|
机器学习/深度学习 监控 算法
局域网行为监控软件 C# 多线程数据包捕获算法:基于 KMP 模式匹配的内容分析优化方案探索
本文探讨了一种结合KMP算法的多线程数据包捕获与分析方案,用于局域网行为监控。通过C#实现,该系统可高效检测敏感内容、管理URL访问、分析协议及审计日志。实验表明,相较于传统算法,KMP在处理大规模网络流量时效率显著提升。未来可在算法优化、多模式匹配及机器学习等领域进一步研究。
125 0
|
缓存 C# Windows
C#程序如何编译成Native代码
【10月更文挑战第15天】在C#中,可以通过.NET Native和第三方工具(如Ngen.exe)将程序编译成Native代码,以提升性能和启动速度。.NET Native适用于UWP应用,而Ngen.exe则通过预编译托管程序集为本地机器代码来加速启动。不过,这些方法也可能增加编译时间和部署复杂度。
636 2
|
9月前
|
JSON C# 数据格式
【Azure Function】C#独立工作模式下参数类型 ServiceBusReceivedMessage 无法正常工作
Cannot convert input parameter 'message' to type 'Azure.Messaging.ServiceBus.ServiceBusReceivedMessage' from type 'System.String'.
189 73
|
C# 开发者 Windows
在VB.NET项目中使用C#编写的代码
在VB.NET项目中使用C#编写的代码
167 0
|
C#
C# 图形验证码实现登录校验代码
C# 图形验证码实现登录校验代码
288 2
|
设计模式 开发框架 前端开发
MVC 模式在 C# 中的应用
MVC(Model-View-Controller)模式是广泛应用于Web应用程序开发的设计模式,将应用分为模型(存储数据及逻辑)、视图(展示数据给用户)和控制器(处理用户输入并控制模型与视图交互)三部分,有助于管理复杂应用并提高代码可读性和维护性。在C#中,ASP.NET MVC框架常用于构建基于MVC模式的Web应用,通过定义模型、控制器和视图,实现结构清晰且易维护的应用程序。
197 2
|
12月前
|
设计模式 程序员 C#
C# 使用 WinForm MDI 模式管理多个子窗体程序的详细步骤
WinForm MDI 模式就像是有超能力一般,让多个子窗体井然有序地排列在一个主窗体之下,既美观又实用。不过,也要小心管理好子窗体们的生命周期哦,否则一不小心就会出现一些意想不到的小bug
941 0
|
前端开发 程序员 API
从后端到前端的无缝切换:一名C#程序员如何借助Blazor技术实现全栈开发的梦想——深入解析Blazor框架下的Web应用构建之旅,附带实战代码示例与项目配置技巧揭露
【8月更文挑战第31天】本文通过详细步骤和代码示例,介绍了如何利用 Blazor 构建全栈 Web 应用。从创建新的 Blazor WebAssembly 项目开始,逐步演示了前后端分离的服务架构设计,包括 REST API 的设置及 Blazor 组件的数据展示。通过整合前后端逻辑,C# 开发者能够在统一环境中实现高效且一致的全栈开发。Blazor 的引入不仅简化了 Web 应用开发流程,还为习惯于后端开发的程序员提供了进入前端世界的桥梁。
1679 1
|
中间件 数据库连接 API
C#数据分表核心代码
C#数据分表核心代码
129 0

热门文章

最新文章