C#简介
是什么?
由微软创建的一种面向对象的编程语言,在 .NET Framework 上运行。源于c类语言家族,与其他流行语言(C++和Java)很接近。 同时C#在现在也广泛地应用于移动应用,桌面应用程序,网路应用程序,网页服务,网站,游戏制作,虚拟现实,数据库应用等等。
为社么现在编程语言更倾向于C#?
- 该编程语言在世界上相对流行
- 在具有一定的编程基础的人手中相对而言更简单易学
- 具有强大的社区支持
- 语言面向对象,为程序员提供了清晰的结构,并允许diamagnetic重用,降低了开发成本
与市面上其他常见的开发语言相似(C,C++,Java),程序员方便切换。
简单的C#语句理解
下面我们将以最简单的“Hello World”来简单了解一下C#中的语法特点
using System;
//这个语句意味着我们可以使用Stytem命名空间中的类
namespace HelloWorld//namespace用于组织代码,是类和其他命名空间的容器
//接下来大括号内部即我们主要的代码部分,标志着代码的开始和结束
{
class Program
/*class是数据和方法的容器,为程序带来功能的实现。注意在C#中运行的每一行代码必须位于类的内部。这个示例中我们将类命名为Program
*/
{
static void Main(string[] args)
/*Main 方法,大括号内的所有代码都将被执行*/
{
Console.WriteLine("Hello World!");
/*Console是命名空间的一个类System,它有一个WriteLine()用于输出/打印文本的方法。*/
}
}
}
代码的运行结果如下:
通过学习上面的代码,我们发现有很多C#专有名词我们难以理解,接下来我们将以通俗易懂的方式来辅助大家来理解。
C#的常见语法概念:
1.面向对象
面向对象分为两步:面向过程,面向对象。其中面向过程可简单概述为:分析解题步骤->用函数实现解题步骤->使用时依次调用;而面向对象可简单概述为:存在一个对象(实际上是需要解决的问题主题)->将对象抽象为类(这个时候类的概念就清楚了,实际上就是抽象后的对象或者说是问题,使用实际案例来解释的话就是水果这个大的概念和苹果这个具体的对象)->此时问题便可以插叙某个事物的状态特征和行为
注意单个问题一旦经过研究就成为对象,且此时该对象一定拥有状态特征(因为已经经过研究,所谓状态特征就是指研究时对象的状态),但该对象不一定存在行为。其次由于对象是我们想要研究的物体或问题,因此对象一定存在且为实体;与此相对而言,类是人们为了方便研究对象而抽象出的概念,仅指状态特征类似的抽象群体,因此是为虚构不存在的。
面向对象的优点
面向对象易维护,容易重复使用,容易重复扩展。同时它还具有封装,继承和多态性的特征(之后会提到)因此可以设计出低耦合的系统,使系统更加灵活且易于维护。
类的定义
class Car
{
string color = "red";
}
阅读上面的代码,我们发现创建一个名为“ Car
”并带有变量的类color,因为
对象是从类创建的。我们已经创建了名为的类Car
,所以现在我们可以使用它来创建对象。
对象的定义
class Car
{
string color = "red";
static void Main(string[] args)
{
Car myObj = new Car();
Console.WriteLine(myObj.color);
}
}
现在我们已经创建一个名为“ myObj
”的对象并用它来打印 的值 color,并且对于对象的概念更加清晰了——对象可以进行明确的操作,如上述代码中我们定义了一个新的代码并且为它赋值。
2.名称空间
命名空间的设计目的是提供一种方式从而使一组的名称与其他的名称分隔开,即在一个命名空间中声明的类的名称 与另一个命名空间中声明的相同的类的名称不会导致冲突。
名称空间的程序定义
namespace Test
{
/*内容定义*/
}
3.传参
已知信息可以作为参数传递给方法。参数在方法内充当变量。参数在方法名称后面的括号内指定,因此我们可以添加任意多个参数,且只需要用逗号分隔。以下示例有一个程序,该程序采用被string
调用的fname作为参数。调用该程序时,我们传递一个参数,该名字参数在方法内部用于打印全名
using Stytem;
class Program
{
/*定义一个名为MyMethod的静态方法,该方法用于接收一个string(类似于字符串)类型的参数fname*/
static void MyMethod(string fname)
{
/*在控制台输出fname参数和字符串“Refsnes”的拼接结果*/
Console.WriteLine(fname + "Refsnes");
}
static void Main(string[] args)
{
/*调用MyMethod方法,并对“Liam”进行传参*/
MyMethod(“Liam”);
// 再次调用 MyMethod 方法,并传递参数 "Jenny"
MyMethod("Jenny");
// 再次调用 MyMethod 方法,并传递参数 "Anja"
MyMethod("Anja");
}
}
当然我们也可以传递多个参数,相关程序如下:
using Stytem;
class Program
{
static void MyMethod(string fname, int age) //定义两个类
{
Console.WriteLine(fname + " is " + age);
}
static void Main(string[] args)
{
MyMethod("Liam", 5);
MyMethod("Jenny", 8);
MyMethod("Anja", 31);
}
}
注意当某个为值类型的数据在传参的过程中相当于复制粘贴过程而非传递移动过程,因此该数原本的值并未改变,当然如果想要改变这种情况可以可以将仅限大小的值传递改为引用传递
进行修改的方法:
/*Test (ref a)实战操作如下*/
static void Test (ref int x)
{
/*代码内容*/
}
除此之外,将值传递修改为引用传递的方法不止一种,且包括ref法和out法,同时二者具有鲜明的不同点:ref法在引用前引用值必须赋值,且函数不一定引用参数;out法在引用前不能赋值,且函数中一定要给引用值赋值同时当函数中不存在out时,函数只能返回一个类型,而添加out则可以使函数返回多个类型。