C# 基础知识 (一).概念与思想篇

2023-11-13

在C#中有一些我自己认为比较独特的知识点,这些知识点是我经常使用的知识,但对它们的了解还是比较少的,所以通过查找资料学习,总结了这些独特的知识点并简单叙述,第一篇主要是一些概念和思想方面的知识。(后面还有C#其他篇的文章)

一.C#概念

C#语言是从C和C++语言演变而来的,是微软创建的一门面向对象、运行在.NET Framework上的高级程序语言,是Windows的一个必要组件,包括一个称为公共语言运行时(common language runtime,CLR)的虚拟执行系统和一组统一的类库。(C#源文件扩展名为.cs)

C#与Java有很多相似的地方:继承、接口、声明命名空间(using&import)、从Main入口点开始执行、源代码被编译成中间状态等。同时也有明显不同之处:C#借鉴了Delphi的与COM是直接集成的特点、它们所执行的平台也不相同,Java运行环境JRE(Java Runtime Environment),C#运行环境CLR(Common Language Runtime),且CLR支持多种语言;同时C#提供封箱装箱等方法。

二.面向对象思想

面向对象是将客观事物看做属性和行为的对象,通过抽象同一类对象的共同属性和行为,形成类。通过对类的继承和多态实现代码重用等。对象(Object)是类(Class)的一个实例(Instance),如果将对象比作房子,那么类就是房子的设计图(类中定义包括属性和方法)。

面向对象的三个基本特征为:

(1).封装:把客观事物封装成抽象的类,类中数据和方法只让可信类或对象操作,不可信的隐藏(内部细节)

(2).继承:它可使用类的所有功能,无需重新编写原有类且对功能进行扩展

(3).多态:一般类中定义的属性或行为,被特殊类继承后,可以具有不同的数据类型或表现不同的行为,各个类能表现不同的语义,实现的两种方法为覆盖和重载

通过下面的例子来讲解面向对象:

例1:让你编写一个计算长方体体积的程序,通常的思想是定义3个变量长=a,宽=b,高=c,体积v=a*b*c;而在面向对象思想中先创建一个长方体的类,在类中定义长宽高和体积,然后定义方法,在实例化使用。(C++代码)

class Rect {
public:
	void showArea(…);         //定义方法:计算长方体体积
private:
	float a,b,c,v;            //定义属性:长 宽 高 体积(私有成员)
}
void Rect::showArea(…) {…}

这样的好处是它是站在事物本身的角度去思考解决问题,如果上面采用面向过程定义函数的形式实现,当出现多个形状时,你需要对每一种形状都定义一种方法,而面向对象只需把这些形状的属性和方法抽象出来,更加方面的实现。

值得注意的是,面向对象提供的是一种思想,而非仅仅是课本中的那点知识,很多时候我们仅仅是把使用了C++、C#或Java一门面向对象的语言,或者是定义了几个类、使用继承等知识就认为自己运用了面向对象(我就是这样的);但我更认为面向对象是一种思想,一种更好的解决实际问题的方法。比如有这样一个问题:

2:为了方便儿童学习编程,X公司开发了一套Racing Car 模拟器,使用这个模拟器每个孩子都可以用一种简单的语言来控制一辆赛车,例如,right,left等。请设计一种简单的语言,给出它的语法,以及该语言的类图。

这就是我们实际编程中联系到生活的问题,它涉及到了设计模式的相关知识,其中我采用的方法是“命名模式”实现的:客户端是定义Children和Car,请求者是Children发出的Right\Left\Up\Down命令,接受实现者是Car执行Move(),抽象命令是上下左右的抽象接口,具体命令是Car的上下左右。我制作的类图如下:

 

通过这个例子我不是想证明我采用命令模式和画的类图是否正确,我想阐述的想法是我们学习面向对象知识主要是用来解决实际生活中的问题,让它更加高效的解决问题和优化代码。在学习《设计模式》时老师就曾说过“模式是现成的,但实现方法要靠自己;同时,学习的时候要敢于否认自己以前很熟悉的套路,甚至经典套路,只要能更加高效正确的完成项目,你的模式就很可能就是经典。”所以,我才认为面向对象是一种思想,不是宏观的C语言就是面向过程,C++、C#就是面向对象。

同时,面向对象思想要适应需求的变化,解决用户的实际需求,在设计时就要尽量考虑到变化,会涉及到抽象、封装变化(重点)、设计模式等知识。补充:C#中的对象都是System.Object的子类,即所有对象都继承System.Object,这样的好处是所有的对象都可以有公用的方法,如ToString()方法。

三.总结

上面的内容主要是我对C#基础知识的一些自己理解,很可能我理解思想是错误的,但我更希望提供一种自己的思想与大家分享。同时,由于知识有限,做的项目也少,可能理解有错误的地方或还没有理解更深层的地方,见谅!最后希望几十年后的自己也能像很多大神一样回过头来对年少时的自己写的这些博文做些更深入的分析,在根据那时的经历写出更优秀的阅历与大家分享更深刻的经验!鼓励自己与大家加油。

(By:Eastmount 2013-8-20 夜1点)

参看一些书籍孙景瑞的《从零开始学C#》、罗刚的《使用C#开发搜索引擎》、《设计模式》课件、同时参考了CSDN论坛中一篇关于面向对象的讨论,个人认为非常不错。http://bbs.csdn.net/topics/220013605

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 基础知识 (一).概念与思想篇 的相关文章

  • C 语言中的套接字如何工作?

    我对 C 中的套接字编程有点困惑 You create a socket bind it to an interface and an IP address and get it to listen I found a couple of
  • 使用 C# 和反射打印完整的对象图

    我有一个复杂的对象 class A int Field1 int field2 property ClassB ClassB property classC classC etc etc 我想使用反射打印完整的对象图 有什么好的代码吗 一种
  • 从 C++ 中的函数返回二维数组[重复]

    这个问题在这里已经有答案了 可能的重复 C 从函数返回多维数组 https stackoverflow com questions 3716595 c returning multidimension array from function
  • 如何有效地左填充字节数组

    假设我有一个数组 LogoDataBy byte 0x00000008 0x00000000 0x41 0x00000001 0x42 0x00000002 0x43 0x00000003 0x44 0x00000004 0x31 0x00
  • 起订量工作单元

    我是单元测试的新手 我想为我的搜索功能创建一个测试 我的服务层看起来像 public class EmployeeService BaseService IEmployeeService public EmployeeService IUn
  • 如何修复 TcpClient Ip 标头错误校验和

    我正在使用 System Net Sockets TcpClient 类 但每当我通过网络发送自定义数据包时 我都会在wireshark捕获上看到错误的校验和 我该如何修复它 问题是您在网络接口上设置了校验和卸载 这会导致您的网卡计算校验和
  • DataGridView小数不排序

    好吧 我有一个 DataGridView 它的数据绑定如下 dataGridViewChartOre AutoGenerateColumns false dataGridViewChartOre DataSource xml GetOreC
  • 获取进程的所有 DLL

    我想获取为给定进程加载的所有 dll 的列表 我目前正在使用 NET框架4 0 我知道有一个bug https connect microsoft com VisualStudio feedback details 546430 syste
  • 如何使用 Linq to Sql 修剪值?

    在数据库中 我有一个名为 联系人 的表 名字和其他此类字符串字段设计为使用 Char 数据类型 不是我的数据库设计 我的对象 Contact 映射到属性中的字符串类型 如果我想做一个简单的测试 通过 id 检索 Contact 对象 我会这
  • OpenMP 和 C++:this 指针

    Is thisOpenMP 中始终共享指针 尽管编译器不会抱怨以下代码default none pragma omp parallel for default none shared n for SInt i 0 i lt n i f i
  • vs2010 c++ 通过debug查看指针内容

    我正在使用 Vs2010 c 处理 2D 数组 我从一维指针开始 并使用操作 如下 class CMatrix void clear public int nRows int nCols short MyMat CMatrix CMatri
  • 如何在PropertyGrid中自定义绘制GridItem?

    我想以与所有者在 ListView 详细信息 和其他控件中绘制项目类似的方式在 PropertyGrid 中绘制属性值 如果将属性声明为 Color 类型 则其值将使用字符串描述旁边的颜色样本来绘制 如果属性是图像类型 则在字符串描述旁边绘
  • 如何在控制台程序中获取鼠标位置?

    如何在 Windows 控制台程序中用 C 获取鼠标单击位置 点击时返回鼠标位置的变量 我想用简单的文本命令绘制一个菜单 这样当有人点击时 游戏就会注册它并知道位置 我知道如何做我需要做的一切 除了单击时获取鼠标位置 您需要使用 Conso
  • 随机排列

    我无法找到一种随机洗牌元素的好方法std vector经过一些操作后 恢复原来的顺序 我知道这应该是一个相当简单的算法 但我想我太累了 由于我被迫使用自定义随机数生成器类 我想我不能使用std random shuffle 无论如何这没有帮
  • 为什么 g++ 在编译的二进制文件中存储类名?

    我注意到如果我跑strings在我编译的程序上g 输出包含它使用的各种类的名称 该程序是用 O3并且没有 g or p 并且当我剥离二进制文件时 类名仍然存在 我想知道为什么有必要g 将此信息存储在二进制文件中 出现的类名似乎都是使用虚函数
  • 使用客户端 hello 消息进行 TLS 协议检测

    我需要检测网络流量中的 https 数据包 到目前为止 我将所有 443 标记为 https 但我不想再在这种情况下使用端口信息 检查客户端问候消息是否足够 Check 22 and version info 0300 0301 or 03
  • XSD、泛型和 C# 类的困境

    我有以下简单的 XSD 文件
  • 比较 C# 中的对象属性[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动
  • 如何正确对齐 WPF GeometryGroup 中的路径?

    我正在使用一个GeometryGroup在圆的中心绘制一个符号 下面的示例显示了我在对此进行实验时的尝试之一 它具有从同一原点 32 32 出发的三条直线
  • Image.Save 异常“GDI+ 中发生一般错误。”保存到 MemoryStream 时

    我有一个服务器客户端应用程序 我想从服务器获取屏幕截图 但在线bitmap Save ms System Drawing Imaging ImageFormat Png 我得到这个例外 A generic error occurred in

随机推荐

  • tensorflow2调用huggingface transformer预训练模型

    tensorflow2调用huggingface transformer预训练模型 一点废话 huggingface简介 传送门 pipline 加载模型 设定训练参数 数据预处理 训练模型 结语 一点废话 好久没有更新过内容了 开工以来就
  • python爬取美女_知乎大神用Python爬取高颜值美女(Python爬虫+人脸检测+颜值检测)...

    import time import os import re import requests from lxml import etree from aip import AipFace 百度云 人脸检测 申请信息 唯一必须填的信息就这三
  • 对List集合进行自定义规则排序

    这次的场景是要对一个List lt 对象 gt 中的某个属性进行自定义排序 废话不多说 直接上代码 首先你要自定义一个排序规则 比如下面这种 public class MySort public static final HashMap
  • 西普部分CTF题目(web)(持续更新)

    1 菊花 题目地址 http www simplexue com ctf examctfdetail 729 点击 我是吊死 进入sim php页面 post参数为id 提示需要net framework 9 9 用burp拦截 修改use
  • JS 实现抛物线动画案例

    相信大家都有浏览过 很多购物网站购物车的添加商品动画 今天 我们就手写一个简单的抛物线动画 先上案例 一 绘制页面 我们这里简单实现 一个按钮 一个购物车图标 样式这里直接跳过 最终dom结构 div class container div
  • eclipse 编译dubbo2.8.4 源码

    第一步 准备工作 下载dubbox的源代码 下载地址 https github com dangdangdotcom dubbox 第二步 编译源代码 maven编译工具 打开CMD命令窗口 切换到dubbox源代码的所在文件夹 E wor
  • Java——数据结构之顺序表

    文章目录 Java 数据结构之顺序表 1 顺序表的简单了解 2 接口的实现 1 创建初始变量 2 打印顺序表 3 添加元素 4 判断是否包含元素 5 查找元素的下标 6 获取 pos 位置的元素 7 更新pos 位置的元素值 8 删除元素
  • pip install报错 [ImportError]: DLL load failed while importing _socket:参数错误

    pip install 时报错 ImportError DLL load failed while importing socket 参数错误 开始以为是虚拟环境的问题 换了虚拟环境还是不行 百度到了解决办法 Win7系统需要安装KB253
  • Spring系列——Spring MVC配置文件

    Spring系列 Spring MVC配置文件 一 前端控制器DispatcherServlet 二 RequestMapping注解 1 使用方法 1 1 标注在方法上 1 2 标注在类上 2 RequestMapping注解的属性 3
  • 机器视觉入门之路(三九--A,霍夫变换(hough transform)寻找直线,c++)

    xy坐标系直线 y kx b 请看图 假定红色线段上的所有样本点 100个 都满足上面的直线方程 a图 也就是说 红色的点 x1 y1 x2 y2 x3 y3 x98 y98 x99 y99 x100 y100 带入方程 只能求出一个k值和
  • Redis入门(一)

    第1章 NoSQL 1 1 NoSQL数据库 1 1 1 NoSQL是什么 1 NoSQL Not Only SQL 意即 不仅仅是SQL 泛指非关系型的数据库 2 NoSQL不拘泥于关系型数据库的设计范式 放弃了通用的技术标准 为某一领域
  • 圆相交 马蹄集

    圆相交 难度 白银 0时间限制 1秒 巴占用内存 64M 输入2个圆的圆心的坐标值 x y 和半径 判断2个圆是否相交 输出YES或者 NO 格式 输入格式 输入整型 空格分隔 每行输入一组信息 输出格式 输出YES或者NO Created
  • 《计算机组成原理实验》 多周期CPU

    计算机组成原理实验 多周期CPU 前言 这是中山大学2018年计算机组成原理实验中多周期CPU的实验报告 仿真与写板的内容暂略 所有源代码 包括写板 已经上传至我的github当中 欢迎大家访问 github个人主页 https stara
  • wxWidgets多线程及事件传递

    前言 最近忙着写项目 wxWidgets计划还有wxWidgets日志系统的拦截重定向 剩下一些比较杂的知识点 想到哪写到哪 比如进程间通信 调用外部程序后结束本程序 用于升级程序 集成带窗口的ActiveX 创建单进程程序等 这些文档上基
  • 分享66个HTML&CSS源码,总有一款适合您

    HTML CSS源码 分享66个HTML CSS源码 总有一款适合您 下面是文件的名字 我放了一些图片 文章里不是所有的图主要是放不下 大家下载后可以看到 源码下载链接 https pan baidu com s 1AeVqON7byvt
  • 常用的HDFS操作

    常用的HDFS操作 利用Hadoop提供的shell命令完成任务 1 向HDFS中上传任意文本文件 如果指定的文件在HDFS中已经存在 由用户指定是追加到原有文件末尾还是覆盖原有文件 2 从HDFS中下载指定文件 如果本地文件与要下载的文件
  • C++BUG: [Error] invalid array assignment

    C BUG Error invalid array assignment 1 Introduction 2 memcpy 函数原型 功能 头文件 返回值 与strcpy的区别 实例 1 Introduction 在使用数组给数组赋值时 会出
  • INADDR_ANY的用法

    INADDR ANY就是指定地址为0 0 0 0的地址 这个地址事实上表示不确定地址 或 所有地址 任意地址 一般来说 在各个系统中均定义成为0值 例如MontiVista Linux中在 usr include netinet in h定
  • 个人跨境电商要多少钱?新手怎么做跨境电商?

    近几年 随着跨境电商的迅速发展 所以很多人都跃跃欲试 想开始从事跨境电商行业 但是想要加入跨境行业的话 我们就得需要先提前了解清楚个人做跨境电商需要多少钱 今天就给大家讲一下个人做跨境电商所需的花费和新手做跨境电商的五大法则 1 平台费用
  • C# 基础知识 (一).概念与思想篇

    在C 中有一些我自己认为比较独特的知识点 这些知识点是我经常使用的知识 但对它们的了解还是比较少的 所以通过查找资料学习 总结了这些独特的知识点并简单叙述 第一篇主要是一些概念和思想方面的知识 后面还有C 其他篇的文章 一 C 概念 C 语