C#——纯面向对象语言
本文共764个中文字符
C# 是一个简单、现代化、面向对象和类型安全的编程语言。C#非常类似于 C、C++、Java、JavaScript,很容易上手,博主曾断断续续地写过两年的C#代码,在此也是有一点点经验,下面介绍一下 C# 这门语言。
1998年底,微软学习了Java的方法,引入虚拟机技术;同年12月,微软开启了 COOL 项目。2000年,COOL 更名 C# 并在7月份发布。
C# 语法高度重视表达,简化了 C++ 的许多复杂操作,并提供 Java 没有的 null 值、枚举、委托、lambda 表达式和直接内存访问;支持泛型方法和类型;还有特有的 LINQ 表达式。 C# 源文件可以定义任意数量的类、结构、接口和事件,是纯面向对象的语言。
“纯面向对象”,意味着“一切皆对象”,请看如下 Hello World 代码:
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
System.Console.WriteLine("Hello World!");
}
}
}
即便是Main
函数,也讲究放在Program
这个“类”里面;类似于 C 语言printf
的WriteLine
函数,也讲究放在Console
这个“类”里面,这正是纯面向对象的体现。
事实上,不仅仅是Main
,连int
也是一个“类”(准确地说是“结构struct
”),int
的“真身”是System.Int32
,其定义如下:
using System.Globalization;
namespace System
{
public struct Int32 : IComparable, IComparable<Int32>, IConvertible, IEquatable<Int32>, IFormattable
{
public const Int32 MaxValue = 2147483647;
public const Int32 MinValue = -2147483648;
public static Int32 Parse(string s);
public static Int32 Parse(string s, NumberStyles style);
public static Int32 Parse(string s, NumberStyles style, IFormatProvider provider);
public static Int32 Parse(string s, IFormatProvider provider);
public static bool TryParse(string s, NumberStyles style, IFormatProvider provider, out Int32 result);
public static bool TryParse(string s, out Int32 result);
public Int32 CompareTo(Int32 value);
public bool Equals(Int32 obj);
public override bool Equals(object obj);
public override Int32 GetHashCode();
public override string ToString();
public string ToString(IFormatProvider provider);
public string ToString(string format);
public string ToString(string format, IFormatProvider provider);
}
}
这些代码的含义是,Int32
这个类本身具有最小值和最大值两个属性(常量const
属性,同时也是静态属性),这个类本身提供字符串转Int32
的各种方法(称为静态static
方法),而Int32
的对象提供比较、获取哈希值、Int32
转字符串的方法。
看起来最基础的int
的内容其实十分复杂,但也因此使 C# 更容易上手,因为任何一个类几乎都提供了丰富的属性和方法可供使用。
通过上面这个例子,我们对int
有了更进一步的了解。那么,关于int
的特点我们还能发掘多少呢?
留意到
public struct Int32 : IComparable, IComparable<Int32>, IConvertible, IEquatable<Int32>, IFormattable
这一行冒号后面的部分。它表示“继承”,而后面若干个I
开头的分别表示可比较、Int32
类型的可比较、可转换、可相等、可格式化。这5个特点给Int32
下了个不完整的定义。实际上,这5个“特点”叫做“接口interface
”,接口也是 C# 的“类”之一,是指定一组函数成员(不包括数据成员)而不实现成员的引用类型。与 C++ 不同,C# 中的接口有专门的关键字,并且用得非常广泛。以上5个接口的定义如下:
namespace System
{
public interface IComparable
{
int CompareTo(object obj);
}
public interface IComparable<in T>
{
int CompareTo(T other);
}
public interface IConvertible
{
TypeCode GetTypeCode();
bool ToBoolean(IFormatProvider provider);
byte ToByte(IFormatProvider provider);
char ToChar(IFormatProvider provider);
DateTime ToDateTime(IFormatProvider provider);
decimal ToDecimal(IFormatProvider provider);
double ToDouble(IFormatProvider provider);
short ToInt16(IFormatProvider provider);
int ToInt32(IFormatProvider provider);
long ToInt64(IFormatProvider provider);
sbyte ToSByte(IFormatProvider provider);
float ToSingle(IFormatProvider provider);
string ToString(IFormatProvider provider);
object ToType(Type conversionType, IFormatProvider provider);
ushort ToUInt16(IFormatProvider provider);
uint ToUInt32(IFormatProvider provider);
ulong ToUInt64(IFormatProvider provider);
}
public interface IEquatable<T>
{
bool Equals(T other);
}
public interface IFormattable
{
string ToString(string format, IFormatProvider formatProvider);
}
}
目前,C# 语言的使用非常广泛,2017年3月,C# 在世界编程语言排行榜中排第4位。C# 可用于 UWP、ASP .NET、Office、Android、Azure、iOS 等多个项目中。并且,得益于 Visual Studio 这一强大的 IDE,C# 的前景仍然非常光明。