惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google Online Security Blog
Google Online Security Blog
S
Security @ Cisco Blogs
Recent Commits to openclaw:main
Recent Commits to openclaw:main
人人都是产品经理
人人都是产品经理
The Hacker News
The Hacker News
W
WeLiveSecurity
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
博客园 - 司徒正美
雷峰网
雷峰网
L
LINUX DO - 最新话题
博客园 - 叶小钗
云风的 BLOG
云风的 BLOG
The Last Watchdog
The Last Watchdog
V2EX - 技术
V2EX - 技术
S
Security Affairs
有赞技术团队
有赞技术团队
月光博客
月光博客
T
Threatpost
T
Tor Project blog
O
OpenAI News
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
V
V2EX
Know Your Adversary
Know Your Adversary
Project Zero
Project Zero
博客园 - 三生石上(FineUI控件)
D
Docker
AWS News Blog
AWS News Blog
AI
AI
P
Proofpoint News Feed
K
Kaspersky official blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
Darknet – Hacking Tools, Hacker News & Cyber Security
www.infosecurity-magazine.com
www.infosecurity-magazine.com
S
Securelist
F
Fortinet All Blogs
F
Full Disclosure
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
量子位
Hacker News - Newest:
Hacker News - Newest: "LLM"
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
P
Palo Alto Networks Blog
Cyberwarzone
Cyberwarzone
Cisco Talos Blog
Cisco Talos Blog
美团技术团队
N
News | PayPal Newsroom
T
The Blog of Author Tim Ferriss
MyScale Blog
MyScale Blog

博客园 - Ferry

ASP.NET网站权限设计实现(三)——套用JQuery EasyUI列表显示数据、分页、查询 ASP.NET网站权限设计实现(二)——角色权限绑定 ASP.NET读取网络图片并在页面上显示 ASP.NET网站权限设计实现(一)——使用PowerDesigner进行数据库设计 Visual Studio 2010 架构图之用例图(UML Use Case Diagram) ASP.NET MVC3 新的视图引擎(View Engine) 一个德国人图解中西文化差异(值得一看) 微软AJAX CDN(内容分发网络) 注册使用GAC—Global Assembly Cache(.NET) ASP.NET 递归将分类绑定到 TreeView - Ferry 新浪微博PC客户端(DotNet WinForm版)——功能实现分解介绍 新浪微博PC客户端(DotNet WinForm版)—— 初探 C#:30行数据插入到数据库中的效率测试-一行行执行、构造SQL一次执行、SqlBulkCopy C#使用GMAIL群发带附件邮件的例子 ASP.NET Web 应用开发实战快速上手系列 3—C#面向对象编程纲要-类 ASP.NET带进度条多文件上传 ASP.NET4.0中客户端ID的生成 在高优先级下运行应用程序 学习使用NHibernate2.1.0Beta1(续七)— 单例模式
ASP.NET Web 应用开发实战快速上手系列 2——C#基础
Ferry · 2010-09-28 · via 博客园 - Ferry

      这里介绍C#,最高到3.0这个版本,不涉及4.0的内容,C#4.0的新特性可以参阅:.NET Framework 4 中的新 C# 功能。有C#基础者本文没必要看了。

      所有的C#代码都存储在扩展名为.cs的文件中,一般情况下,一个cs文件保存的就是一个C#类(class)或接口(interface)或结构(struct),这三个是什么,可以先不理会。

      一、用Visual Studio创建项目

      我们创建一个控制台应用程序(Console Application),控制台应用程序一般用于学习C#语言 ,具体步骤(中英文对照):【运行Visual Studio】——点击菜单栏的【文件】(File)-——【新建】(New)——【项目】(Project),出现下图界面:

     

     按上图选择开发语言(C#)下的模板类型Windows中的Console Application。

     1——项目名称

     2——存储目录,可点击输入框后面的【浏览】(Browse)选择

     3——解决方案名称

     4——创建解决方案目录

     5——添加到源代码管理,只有在安装了和VS继承的源代码管理工具后,此项才能选择

     点击【确定】 (OK)创建项目:

     

     项目与解决方案的关系:一个解决方案可以包含多个项目,编译解决方案会编译全部项目,要运行解决方案必须设定启动项目(Set as Startup Project,在项目的右键菜单中可以看到),接下来添加第二个项目:

   右击解决方案名称,在右键菜单中选择【添加】(Add) ——【新建项目】(New Project),

     

      在弹出的窗口中的(项目)名称输入框中输入:MySecondApp,点击【确定】创建第二个项目,解决方案资源管理器(Solution Explorer) 中将出现刚添加的这个项目:

     

    二、C#文件结构

     Program.cs就是一个C#类文件,如果你使用的是VB,扩展名将会是.vb。

     

       第一部分:添加对命名空间的引用,当创建文件时,开发环境会默认(可以修改)添加一些

       第二部分:当前类所在的命名空间,如果在命名空间外访问此类,则必须添加对命名空间MyFirstApp的引用(参考第一部分)或者用完整的访问方式MyFirstApp.Program。

       第三部分:类(先不要管什么是类)

  三、C#语言规范

      初学者写代码的时候要注意,当不考虑嵌套类型时,所有代码,除了以下代码(命名空间引用、指定命名空间、定义类、定义接口、定义结构、定义枚举、定义委托),都应该写在类、结构、接口、枚举的内部,内部代码也有讲究,后面再说。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace MyFirstApp
{
    
//创建名为Animal的类
    class Animal
    {
        
//代码写在这里
    }
    
//创建名为IActivity的接口
    interface IActivity
    {
        
//代码写在这里
    }
    
//创建名为CurrentPosition的结构
    struct CurrentPosition
    {
        
//代码写在这里
    }
    
//创建名为WeekDay的枚举
    enum WeekDay
    {
        
//代码写在这里 
    }
    
///创建名为Del的委托
    delegate void MyEventHandler();
}

      C#中的一个语句:从行的第一个单词(或上一个分号结束位置)开始直到遇到分号(“;”,英文半角),如

      也就是说C#是分号断句,下面的代码虽然在一行上,但表示两个语句,这种写法要尽量避免:

int daysOfWeek = 7;int weekend = 2;

      C#中的注释

using System;namespace MyFirstApp
{
    
/// <summary>
    
/// 类Program
    
/// 包含应用程序的主入口函数Main
    
/// 用于类、结构、接口、枚举、方法
    
/// </summary>
    class Program
    {
        
/*
         * 多行注释
         * 控制台应用程序的主入口函数
         * args:string类型的数组
         
*/
        
static void Main(string[] args)
        {
            
//单行注释,定义整型变量
            int daysOfWeek = 7;
        }
        
/// <summary>
        
/// 方法说明
        
/// </summary>
        
/// <param name="s">参数说明</param>
        static void WriteLineString(string s)
        {
            
/*
            多行注释
            Console.WriteLine(s);
            Console.ReadLine();
             
*/
        }
    }
}

      C#种对象命名规范:

           1)不能使用关键字(IDE中默认为蓝色);

           2)可以用字母、数字、下划线组合,但只能以字母或下划线开始 ;名称可以由多个单词或单词的缩写组合;可以定义纯中文对象名,但不提倡;

           3)除变量、常量外,其它命名名称的每个单词的第一个字母应该大写;变量则从第二个单词开始第一个字母大写,常量则全部大写;

           可以参照一些类库中对象的元数据(metadata),如下图,双击类名File,在右键菜单中选择【转到定义】(Go To Definition):

            

          四、C#数据类型

           C#数据类型 分为:值类型和引用类型;也可以分为内置数据类型和用户定义数据类型。

C#类型

.NET Framework
类型

范围

说明

默认值

bool

System.Boolean

 

布尔值,true或false

false

byte

System.Byte

0 到 255

8 位的无符号整数

0

sbyte

System.SByte

-128 到 127

8 位的有符号整数

0

char

System.Char

U+0000 到 U+ffff

16 位 Unicode 字符

‘\0’

decimal

System.Decimal

±1.0 × 10-28 到 ±7.9 × 1028

28 到 29 位有效位

0.0M

double

System.Double

±5.0 × 10-324 到 ±1.7 × 10308

15 到 16 位精度

0.0D

float

System.Single

±1.5 × 10-45 到 ±3.4 × 1038

7 位

0.0F

int

System.Int32

-2,147,483,648 到 2,147,483,647

有符号 32 位整数

0

uint

System.UInt32

0 到 4,294,967,295

无符号 32 位整数

0

long

System.Int64

-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807

有符号 64 位整数

0L

ulong

System.UInt64

0 到 18,446,744,073,709,551,615

无符号 64 位整数

0

object

System.Object

 

对象层次结构的根

-

short

System.Int16

-32,768 到 32,767

有符号 16 位整数

0

ushort

System.UInt16

0 到 65,535

无符号 16 位整数

0

string

System.String

 

Unicode 字符的不变的定长串

-

可空类型

 

特定类型值范围+null值

可空类型是 System.Nullable 结构的实例

 

           关注一下:可空类型和隐式类型局部变量。

          五、C#运算符

算术运算符

运算符

说明

表达式

+

执行加法运算(如果两个操作数是字符串,则该运算符用作字符串连接运算符,将一个字符串添加到另一个字符串的末尾)

操作数1 + 操作数2

-

执行减法运算

操作数1 - 操作数2

*

执行乘法运算

操作数1 * 操作数2

/

执行除法运算

操作数1 / 操作数2

%

获得进行除法运算后的余数

操作数1 % 操作数2

++

将操作数加 1

操作数++ 或++操作数

--

将操作数减 1

操作数-- 或--操作数

~

将一个数按位取反

~操作数

赋值运算符

运算符

计算方法

表达式

求值

结果(X = 10

=

给变量赋值

变量=值
常量=值



+=

运算结果 = 操作数1 + 操作数2

X += 5

X = X + 5

15

-=

运算结果 = 操作数1 - 操作数2

X -= 5

X = X - 5

5

*=

运算结果 = 操作数1 * 操作数2

X *= 5

X = X * 5

50

/=

运算结果 = 操作数1 / 操作数2

X /= 5

X = X / 5

2

%=

运算结果 = 操作数1 % 操作数2

X %= 5

X = X % 5

0


比较运算符

运算符

说明

表达式

检查一个数是否大于另一个数

操作数1 > 操作数2

检查一个数是否小于另一个数

操作数1 < 操作数2

>=

检查一个数是否大于或等于另一个数

操作数1 >= 操作数2

<=

检查一个数是否小于或等于另一个数

操作数1 <= 操作数2

==

检查两个值是否相等

操作数1 == 操作数2

!=

检查两个值是否不相等

操作数1 != 操作数2


类别

运算符

说明

表达式

三元运算符

? :

检查给出的第一个表达式 expression 是否为真。如果为真,则计算 operand1,否则计算 operand2。这是唯一带有三个操作数的运算符

表达式?
操作数1:
操作数2


类别

运算符

说明

表达式

成员访问运算符

.

用于访问数据结构的成员

数据结构.成员

赋值运算符

=

给变量赋值

操作数1 = 操作数2

逻辑运算符

&&

对两个表达式执行逻辑“与”运算

操作数1 && 操作数2

||

对两个表达式执行逻辑“或”运算

操作数1 || 操作数2

!

对两个表达式执行逻辑“非”运算

! 操作数

( )

将操作数强制转换为给定的数据类型

(数据类型) 操作数

          六、变量

           变量用于存储特定类型的值,关于数据类型,参阅上面第四部分,如:

//字符串变量
string userName;
//时间和日期变量
DateTime birth;
//整型变量
int age;
//布尔型变量
bool isChinese;
//单精度浮点型变量
float salary;
//others

        了解一下隐式类型局部变量

        七、常量

           建议常量名全部大写。常量一旦赋值后,其值不能被改变。

         八、选择结构和循环结构

        1)选择结构

  if (<条件>)
  {
  
<语句块>
  }
  
else 
  {
  
<语句块>
  }

      还可以有else if(条件){}一个或多个。

switch (选择变量)
{
    
case 值1: 
       …
       
break;    
    
    
case 值2: 
    …
       
break;
    ...
    ...
    
default : 
    …
}

        各个 case 标签不必连续,也不必按特定顺序排列
        default 标签可位于 switch…case 结构中的任意位置
        default 标签不是必选的,但使用 default 标签是一个良好的编程习惯
        每两个 case 标签之间的语句数不限 

        2)循环结构

do
{
     
//循环内语句
while(条件)

for(初始值;条件;增减)
{
     
//循环内语句

foreach (元素 in 集合)
{
      
//语句
}

       break 语句可用于退出循环
       continue 语句可用于跳过当前循环并开始下一循环
      

        九、数组

         参阅MSDN:数组。 了解交错数组。