C 言语
简介
C 是一种核算机高档程序设计言语,由C言语扩展升级而产生,较早于1979年由本贾尼斯特劳斯特卢普在AT&T贝尔作业室研发
C 既能够进行 C 言语的进程化程序设计,又能够进行以抽象数据类型为特色的根据目标的程序设计,还能够进行以承继和多态为特色的面向目标的程序设计
C 擅长面向目标程序设计的一起,还能够进行根据进程的程序设计。 C 简直能够创立任何类型的程序:游戏、设备驱动程序、HPC、云、桌面、嵌入式和移动运用等,乃至用于其他编程言语的库和编译器也运用C 编写
C 拥有核算机运转的实用性特征,一起还致力于提高大规模程序的编程质量与程序设计言语的问题描绘才能
特色
- 与C言语的兼容性:C 与C言语彻底兼容,C言语的绝大部分内容能够直接用于C 的程序设计,用C言语编写的程序能够不加修改地用于C 。
- 数据封装和数据躲藏:在C 中,类是支撑数据封装的东西,目标则是数据封装的实现。C 通过树立用户界说类支撑数据封装和数据躲藏。在面向目标的程序设计中,将数据和对该数据进行合法操作的函数封装在一起作为一个类的界说。目标被说明为具有一个给定类的变量。每个给定类的目标包含这个类所规定的若干私有成员、公有成员及维护成员。完好界说的类一旦树立,就可看成彻底封装的实体,能够作为一个全体单元运用。类的实践内部作业躲藏起来,运用完好界说的类的用户不需求知道类的作业原理,只需知道怎么运用它即可。
- 支撑承继和重用:在C 现有类的基础上能够声明新类型,这便是承继和重用的思想。通过承继和重用能够更有效地组织程序结构,明确类间联系,并且充分利用已有的类来完成更杂乱、深入的开发。新界说的类为子类,成为派生类。它能够从父类那里承继一切非私有的特点和办法,作为自己的成员。
- 多态性:采用多态性为每个类指定表现行为。多态性构成由父类和它们的子类组成的一个树型结构。在这个树中的每个子类能够接收一个或多个具有相同名字的音讯。当一个音讯被这个树中一个类的一个目标接收时,这个目标动态地决定给予子类目标的音讯的某种用法。多态性的这一特性答应运用高档抽象。承继性和多态性的组合,能够轻易地生成一系列尽管类似但绝无仅有的目标。由于承继性,这些目标共享许多类似的特征。由于多态性,一个目标可有共同的表现方法,而另一个目标有另一种表现方法。
C# 言语
简介
C#是微软公司发布的一种由C和C 衍生出来的面向目标的编程言语、运转于.NET Framework
和.NETCore
(跨渠道)之上的高档程序设计言语。C#看起来与Java有着惊人的类似;它包含了诸如单一承继、接口、与Java简直同样的语法和编译成中间代码再运转的进程。可是C#与Java有着显着的不同,它借鉴了Delphi的一个特色,与COM(组件目标模型)是直接集成的,并且它是微软公司 .NET windows网络框架的主角。
C#是由C和C 衍生出来的一种安全的、安稳的、简略的、高雅的面向目标编程言语。它在承继C和C 强壮功用的一起去掉了一些它们的杂乱特性(例如没有宏以及不答应多重承继)。C#归纳了VB简略的可视化操作和C 的高运转效率,以其强壮的操作才能、高雅的语法风格、立异的言语特性和便捷的面向组件编程的支撑成为.NET开发的优选言语。
C#是面向目标的编程言语。它使得程序员能够快速地编写各种根据MICROSOFT .NET渠道的运用程序,MICROSOFT .NET供给了一系列的东西和服务来最大程度地开发利用核算与通讯范畴。
C#使得C 程序员能够高效的开发程序,且因可调用由C/C 编写的本机原生函数,而绝不丢失C/C 原有的强壮的功用。由于这种承继联系,C#与C/C 具有极大的类似性,了解类似言语的开发者能够很快的转向C#。
特色
C# 言语是一种安全的、安稳的、简略的、面向目标的编程言语, 它不只去掉了 C 和 Java 言语中的一些杂乱特性,还供给了可视化东西,能够高效地编写程序。C# 言语具有如下 4 个特色:
- 简略、安全:在 C 和 C 言语中程序员最头疼的问题便是指针问题,在 C# 言语中现已不再运用指针,并且不答应直接读取内存等不安全的操作。它比 C、C 、Java 供给了更多的数据类型,并且每个数据类型都是固定巨细的。此外还供给了命名空间来办理 C# 文件,命名空间 相当于一个文件夹,在创立程序时,答应在一个命名空间中创立一个或多个类,便利调用和重用。
- 面向目标:与其他面向目标言语相同,C# 言语也具有面向目标言语的基本特征,即封装、承继、 多态。封装便是将代码看作一个全体,例如运用类、办法、接口等。在运用界说好的类、 办法、接口等目标时不必考虑其细节,只需求知道其目标名以及所需求的参数即可,也是一种提升代码安全性的办法。承继是一种表现代码重用性的特性,削减代码的冗余,但在 C# 言语中仅支撑单承继。多态不只表现了代码的重用性,也表现了代码的灵活性,它主要通过承继和实现接口的方法,让类或接口中的成员表现出不同的效果。
- 支撑跨渠道:较早的 C# 言语仅能在 Windows 渠道上开发并运用,目前最新的 C# 6.0 版本现已能在多个操作系统上运用,例如在 Mac、Linux 等。此外,还能将其运用到手机、PDA 等设备上。
- 开发多种类型的程序:运用 C# 言语不只能开发在控制台下运转的运用程序,也能开发 Windows 窗体运用程序、网站、手机运用等多种运用程序,并且其供给的Visual Studio 2015开发东西中也支撑多种类型的程序,让开发人员能快速地构建 C# 运用程序。
两者区别
言语特性不同
- C 言语:C 供给了许多高档言语特性,如模板、多重承继、运算符重载等。
- C# 言语:C# 也供给了许多高档言语特性,如特点、事情、委托、LINQ、异步编程等。C# 的语法相对简略,易于学习。
以下示例:界说一个按钮类 Button,监听其点击事情
C (没有内置事情支撑):
#include <iostream>
#include <functional>
class Button {
public:
std::function<void()> OnClick;
void Click() {
if (OnClick) {
OnClick();
}
}
};
void OnButtonClick() {
std::cout << "Button clicked" << std::endl;
}
int main() {
Button btn;
btn.OnClick = OnButtonClick;
btn.Click();
return 0;
}
C#(内置事情支撑):
using System;
class Button {
public event EventHandler OnClick;
public void Click() {
OnClick?.Invoke(this, EventArgs.Empty);
}
}
class Program {
static void Main() {
Button btn = new Button();
btn.OnClick = OnButtonClick; // 事情
btn.Click();
}
static void OnButtonClick(object sender, EventArgs e) { // event
Console.WriteLine("Button clicked");
}
}
在这个示例中,C 代码运用std::function
模拟事情处理,而 C# 代码运用内置的event
关键字支撑事情。
内存办理不同
- C 言语:C 运用手动内存办理,程序员需求显式地分配和释放内存。这供给了更高的内存控制,但也增加了内存走漏和野指针等过错的风险。
- C# 言语:C# 运用垃圾收回(GC)来自动办理内存,这简化了内存办理,削减了内存走漏和野指针等过错的风险,但或许导致性能丢失。
C (手动内存办理):
#include <iostream>
int main() {
int* arr = new int[5]; // 分配内存
for (int i = 0; i < 5; i) {
arr[i] = i 1;
}
for (int i = 0; i < 5; i) {
std::cout << arr[i] << std::endl;
}
delete[] arr; // 需求手动释放内存
return 0;
}
C#(垃圾收回):
using System;
class Program {
static void Main() {
int[] arr = new int[5];
for (int i = 0; i < 5; i) {
arr[i] = i 1;
}
foreach (int num in arr) {
Console.WriteLine(num);
}
}
}
在这个示例中,C 代码运用new
和delete[]
进行手动内存办理,而 C# 代码依赖于垃圾收回自动办理内存。
类型安全不同
- C 言语:C 答应程序员履行不安全的类型转化,这或许导致运转时过错
- C# 言语:C# 是一种类型安全的言语,它在编译时查看类型转化,以避免类型过错
C 答应不安全的类型转化:
#include <iostream>
int main() {
int num = 42;
double* ptr = reinterpret_cast<double*>(&num); // 不安全类型转化
std::cout << *ptr << std::endl;
return 0;
}
不安全的原因是:reinterpret_cast
将一个int
类型的指针转化为double
类型的指针,后边或许会导致运转时过错
C 中安全的类型转化:
#include <iostream>
int main() {
int num = 42;
double d = static_cast<double>(num); // 安全类型转化:int 转 double
std::cout << d << std::endl;
return 0;
}
C# 安全的类型转化:
using System;
class Program {
static void Main() {
int num = 42;
double d = Convert.ToDouble(num); // 安全类型转化
Console.WriteLine(d);
}
}
渠道支撑不同
- C 言语:和 C 言语相同能够在多个渠道上编译和运转,包含 Windows、Linux、macOS、Android 等操作系统。
-
C# 言语:C# 言语的运转依赖于 .NET Framework,因此主要在 Windows 渠道上运用。不过,C# 也支撑多渠道开发,能够运用
.NET Core
进行开发并支撑 Windows、Linux、macOS 渠道。