1.C#编程指南-在C#程序内部

Main方法

C#控制台应用程序必须包含一个Main方法,用于控制程序的开始和结束。在Main方法中创建对象和执行其他方法。

Main方法是驻留在类或结构内的static方法。可以用下列方式之一声明Main方法:

1.该方式返回void

static void Main()
{
//...
}

2.它还可以返回整数

static int Main()
{
//...
return 0;
}

3.对于任意一个返回类型,它可以带有参数

static void Main(string[] args)
{
//...
}
- 或 -
static int Main(string[] args)
{
//...
}

Main方法的参数是字符串数组args,该数组包含用于激活程序的命令行参数。

输入和输出

C#程序通常使用.NET Framework的运行库提供的输入/输出服务。System.Console.WriteLine("Hello World!");语句使用WriteLine方法。此方法是运行库
中的Console类的输出方法之一。它显示了标准输出流使用的字符串参数,输出流后面跟一个新行。其他Console方法用于不同的输入和输出操作。

C#程序的通用结构

C#程序可由一个或多个文件组成。每个文件都可以包含零个或零个以上的命名空间。一个命名空间除了可包含其他命名空间外 ,还可以包含类、结构、接口、枚举、委托等类型。

C#命名规范

命名指南在名称准则中介绍

布局约定
1.使用默认代码编辑器设置(智能缩进、四字符缩进、将制表符保存为空格)。请参见“选项”->“文本编辑器”->“C#”->“格式设置”。

2.每行仅编写一个语句。

3.每行仅编写一个声明。

4.如果续行不自动缩进,将它们缩进一个制表位(四个空格)。

5.在方法定义和属性定义之间添加至少一个空白行。

6.使用括号突显表达式中的子句,如下面的代码所示。

if( (val1 > val2) && (val1 > val3) )
{
//...
}

注释约定

1.将注释放到另一行,而不要放在代码行的末尾。

2.以大写字母作为注释文本的开头。

3.以句点结束注释文本。

4.在注释分隔符(//)和注释文本之间插入一个空格。

5.请勿在注释周围创建已设置格式的星号块。

语言指南

String数据类型

1.使用 + 运算符来连接短字符串,如以下代码所示。

string displayName = nameList[n].LastName + ", " + nameList[n].FirstName;

2.若要在循环中附加字符串,尤其是在您处理大量文本时,请使用StringBuilder对象。

var phrase = "lalalalalalalalalalalalalalalalalalalalalalalalalalalalalala";
var manyPhrases = new StringBuilder();
for (var i = 0; i < 10000; i++)
{
manyPhrases.Append(phrase);
}

隐式类型化局部变量

1.如果赋值语句右侧的变量类型十分明显,或在精确的类型并不重要时,使用隐式类型的局部变量

var var1 = "This is clearly a string.";
var var2 = 27;
var var3 = Convert.ToInt32(Console.ReadLine());

2.赋值语句右侧的类型不明显时,不要使用var。

int var4 = ExampleClass.ResultSoFar();

3.不要依赖变量名来指定变量的类型,这可能是不正确的。

var inputInt = Console.ReadLine();
Console.WriteLine(inputInt);

4.避免使用var取代dynamic。

5.使用隐式类型在for和foreach循环中确定循环变量的类型。

View Code
//下面的示例在 for 语句中使用了隐式类型。 
var syllable = "ha";
var laugh = "";
for (var i = 0; i < 10; i++)
{
laugh += syllable;
Console.WriteLine(laugh);
}

//下面的示例在 foreach 语句中使用了隐式类型。
foreach (var ch in laugh)
{
if (ch == 'h')
Console.Write("H");
else
Console.Write(ch);
}
Console.WriteLine();

数组
在您初始化声明行上的数组时,请使用简洁的语法。

 

//方式1:推荐
string[] array = {"a","e","i","o","u"};
//方式2:
var array = new string[]{"a","e","i","o","u"};
//方式3:使用前需初如化
var array = new string[5];
array[0] = "a";
array[1] = "e";
...

委托

//使用简洁的语法来创建委托类型的实例
public delegate void Del(string message);
public static void DelMethod(string msg)
{
Console.WriteLine("方法的参数:{0}",msg);
}
Del exampleDel1 = DelMethod;
Del exampleDel2 = new Del(DelMethod);

异常处理中的try-catch和using语句

View Code
//1.为大多数异常处理使用try-catch语句
static string GetValueFromArray(string[] array,int index)
{
try
{
return array[index];
}
catch(System.IndexOutOfRangeException ex)
{
Console.WriteLine("索引超出范围:{0}",index);
throw;
}
}

//2.使用C#using语句简化代码。如果有一个try-finally语句,其中finally块中的唯一代码为对Dispose方法的调用,请改用using语句。
Font font1 = new Font("Arial",10.0f);
try
{
byte charset = font1.GdiCharSet;
}
finally
{
if(font1 != null)
{
((IDisposable)font1).Dispose();
}
}

using(Font font2 = new Font("Arial",10.0f))
{
byte charset = font2.GdiCharSet;
}

&& 和 || 运算符

View Code
//若要跳过不必要的比较来避免出现异常和提高性能,在执行比较时,请使用&&代替&,使用||代替|.
Console.Write("请输入除数:");
var dividend = Convert.ToInt32(Console.ReadLine());
Console.Write("请输入被除数:");
var divisor = Convert.ToInt32(Console.ReadLine());
if( (divisor != 0) && (dividend / divisor > 0) )
{
Console.WriteLine("商:{0}",dividend / divisor);
}
else
{
Console.WriteLine("被除数不能为0");
}

New运算符
1.通过隐式类型使用简洁形式的对象实例

var instance1 = new ExampleClass();
//与上面的声明等效
ExampleClass instance2 = new ExampleClass();

2.使用对象初始值设定项来简化对象创建

View Code
//方式1:
var instance3 = new ExampleClass{ Name = "Desktop",ID = 37414,Location = "Redmond",Age = 23};

//方式2:
var instance4 = new ExampleClass();
instance4.Name = "Desktop";
instance4.ID = 37414;
instance4.Location = "Redmond";
instance4.Age = 23;

静态成员

使用类名称调用static成员:ClassName.StaticMember。不要从派生类访问在基类中定义的静态成员。
LINQ查询

View Code
//1.对于查询变量使用有意义的名称。下面的示例使用seattleCustomers代表地处西雅图的客户。
var seattleCustomers = from cust in customers
where cust.City == "Seattle"
select cust.Name;

//2.使用别名以确保通过Pascal大小写格式正确设置匿名类型的属性名称的大小写。
var localDistributors =
from customer in customers
join distributor in distributors on customer.City equals distributor.City
select new { Customer = customer,Distributor = distributor};

//3.在结果中的属性名称不明确时重命名属性。例如,如果查询返回一个客户名称和一个分销商ID,不要在结果中将它们保留为Name和ID,
//而是将它们重命名,以阐明Name是客户的名称,ID是分销商的ID。
var localDistributors2 =
from cust in customers
join dist in distributors on cust.City equals dist.City
select new {CustormerName = cust.Name,DistributorID = dist.ID};

//4.使用隐式类型来声明查询变量和范围变量。
var seattleCustomers = from cust in customers
where cust.City == "Seattle"
select cust.Name

//5.将查询子句对齐在from子句下方,如前面的示例所示。

//6.在其他查询子句前面使用where子句,以确保对一组经过简化和筛选的数据执行后面的查询子句。
var seattleCustomers = from cust in customers
where cust.City == "Seattle"
orderby cust.Name
select cust;

//7.使用多个from子句而不是一个join子句来访问内部集合。例如,在Student对象集合中,每个对象可能都包含一个考试成绩集合。
//在执行下面的查询时,它将返回每一个超过90的分数,以及获得该分数的学生的姓氏。
var scoreQuery = from student in students
from scoe in student.Scores
where scoe > 90
select new {Last = student.LastName,score};

转载于:https://www.cnblogs.com/yechun/archive/2012/03/16/2400663.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值