【声明】

C# 的大多数声明都是从C和C++继承的。下面的表列出了可用的声明的类型:

声明 

例子 

声明列表和块声明

static void Main() {
    F();
    G();
    {
        H();
        I();
    }
}

标号声明和goto声明

static void Main(string[] args) {
    if (args.Length == 0)
        goto done:
    Console.WriteLine(args.Length);

done:
    Console.WriteLine("Done");
}

局部常量声明

static void Main() {
    const float pi = 3.14;
    const int r = 123;
    Console.WriteLine(pi * r * r);
}

局部变量声明

static void Main() {
    int a;
    int b = 2, c = 3;
    a = 1;
    Console.WriteLine(a + b + c);
}

表达式声明

static int F(int a, int b) {
    return a + b;
}

static void Main() {
    F(1, 2);  // Expression statement
}

If声明

static void Main(string[] args) {
    if (args.Length == 0)
        Console.WriteLine("No args");
    else
        Console.WriteLine("Args");
}

Switch声明

static void Main(string[] args) {
    switch (args.Length) {
        case 0:
            Console.WriteLine("No args");
            break;
        case 1:
            Console.WriteLine("One arg ");
            break;
        default:
            int n = args.Length;
            Console.WriteLine("{0} args", n);
            break;
    }
}

While声明

static void Main(string[] args) {
    int i = 0;
    while (i < args.length) {
        Console.WriteLine(args[i]);
        i++;
    }
}

do声明

static void Main() {
    string s;
    do { s = Console.ReadLine(); }
    while (s != "Exit");
}

for声明

static void Main(string[] args) {
    for (int i = 0; i < args.length; i++)
        Console.WriteLine(args[i]);
}

Foreach 声明

static void Main(string[] args) {
    foreach (string s in args)
        Console.WriteLine(s);
}

Break 声明

static void Main(string[] args) {
    int i = 0;
    while (true) {
        if (i > args.Length)
            break;
        Console.WriteLine(args[i++]);
    }
}

continue 声明

static void Main(string[] args) {
    int i = 0;
    while (true) {
       Console.WriteLine(args[i++]);
       if (i > args.Length)
            continue;
       break;
    }
}

return 声明

static int F(int a, int b) {
    return a + b;
}

static void Main() {
    Console.WriteLine(F(1, 2));
    return;
}

throw 声明 and try 声明

static int F(int a, int b) {
    if (b == 0)
        throw new Exception("Divide by zero");
    return a / b;
}

static void Main() {
    try {
        Console.WriteLine(F(5, 0));
    }
    catch(Exception e) {
        Console.WriteLine("Error");
    }
}

checked 和 unchecked 声明

static void Main() {
    int x = 100000, y = 100000;
    Console.WriteLine(unchecked(x * y));
    Console.WriteLine(checked(x * y));  // Error
    Console.WriteLine(x * y);           // Error
}

lock 声明

static void Main() {
    A a = ...
    lock(a) {
        a.P = a.P + 1;
    }
}

【类】

类声明定义新的引用类型。一个类可以从其它类继承,并且可以没用接口或有多个接口。

类的成员可以包括常数、域、方法、属性、索引、事件、操作符、构造函数、析构器和嵌套类型声明。每个成员有相关的访问能力,这控制了可以访问这个成员的程序文本的区域。有访问能力有五种可能形式:

形式 

直观意义 

public

访问不受限制

protected

访问只限于此程序或类中包含的类型

internal

访问只限于此程序

protected internal

访问只限于此程序或类中包含的类型

private

访问只限于所包含的类型

【域】

域是一个代表和某对像或类相关的变量的成员。

【方法】

方法是一个执行可以由对像或类完成的计算或行为的成员。方法有一个形式参数列表(可能为空),一个返回数值(或void),并且可以是静态也可以是非静态。静态方法要通过类来访问。非静态方法,也称为实例方法,通过类的实例来访问。

【属性】

属性是提供对对像或类的特性进行访问的成员。属性的例子包括字符串的长度,字体的大小,窗口的焦点,用户的名字,等等。属性是域的自然扩展。两者都是用相关类型成员命名,并且访问域和属性的语法是相同的。然而,与域不同,属性不指示存储位置。作为替代,属性有存取程序,它指定声明的执行来对他们的进行读或写。

属性是由属性声明定义的。属性声明的第一部分看起来和域声明相当相似。第二部分包括一个get存取程序和一个set存取程序。在下面的例子类Button定义了一个Caption属性。

public class Button
{
private string caption;

public string Caption {
     get {
        return caption;
     }

set {
        caption = value;
        Repaint();
     }
}
}

像Caption属性一样的读写都可以的属性包括get和set存取程序。当属性的值要被读出的时候,会调用get存取程序;当要写属性值的时候,会调用set存取程序。 Properties 在set存取程序中,属性的新值赋给一个名为value的隐含参数。

【事件】

事件是使得对像和类提供通知的成员。一个类通过提供事件声明来定义一个事件,这看起来与域和事件声明相当类似,但是有一个event关键字。这个声明的类型必须是delegate类型。

public delegate void EventHandler(object sender, Event e);

public class Button
{
public event EventHandler Click;

public void Reset() {
     Click = null;
}
}

【操作符】

操作符是一个定义了可以用来使用在类的实例上的表达式操作符所代表的意义的对象。这里有三种可以定义的操作符:一元操作符,二元操作符和转换操作符。

【索引】

索引(indexer)是使得对象可以像数组一样被索引的成员。然而属性使类似域的访问变得可能,索引使得类似数组的访问变得可能。索引的声明类似于属性的声明,最大的不同在于索引是无名的,而且索引包含索引参数。

【实例构造函数】

实例构造函数是实现对类中实例进行初始化的行为的成员。

【析构函数】

析构函数是实现破坏一个类的实例的行为的成员。析构函数不能有参数,不能任何修饰符而且不能被调用。析构函数在碎片收集时会被自动调用。

【静态构造函数】

静态构造函数是实现对一个类进行初始化的行为的成员。静态构造函数不能有参数,不能有修饰符而且不能被调用,当类被加载时,类的静态构造函数自动被调用。

【继承】

类支持单继承,object类型是所有类的基类。

转载于:https://www.cnblogs.com/connorchen/archive/2011/03/20/1989292.html

学习笔记 04----声明和类相关推荐

  1. JavaWeb黑马旅游网-学习笔记04【BaseServlet抽取】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  2. JDBC学习笔记02【ResultSet类详解、JDBC登录案例练习、PreparedStatement类详解】

    黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...

  3. ES6学习笔记04:Set与Map

    ES6学习笔记04:Set与Map JS原有两种数据结构:Array与Object,ES6新增两种数据结构:Set与Map 一.Set数据结构 Set类似于数组,但是成员值不允许重复,因此主要用于数据 ...

  4. Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25

    Effective Java(第三版) 学习笔记 - 第四章 类和接口 Rule20~Rule25 目录 Rule20 接口优于抽象类 Rule21 为后代设计接口 Rule22 接口只用于定义类型 ...

  5. # C# 学习笔记(4) 类

    C# 学习笔记(4) 类 面向对象编程主要是为了写出一个通用的代码,屏蔽差异,方便开发大型项目.类就是面向对象编程的核心之一.和C语言的结构体相比,结构体拥有的功能,类统统都有,除此之外,类还有许多新 ...

  6. Java程序猿的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  7. AJPFX学习笔记JavaAPI之String类

    学习笔记JavaAPI之String类 [size=10.5000pt]一.所属包java.lang.String,没有子类.特点:一旦被初始化就不可以被改变. 创建类对象的两种方式: String ...

  8. 取得 Git 仓库 —— Git 学习笔记 04

    取得 Git 仓库 -- Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区.索引.本地版本库之间的交互:二是本地版本库和远程版本库之间的交互.第一块是基础,第二块是难点. 下面, ...

  9. JavaWeb-综合案例(用户信息)-学习笔记04【删除选中功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb-综合案例(用户信息)-学习笔记01[列表查询] JavaWeb-综合案例(用户信息)-学习笔记02[登录功能] JavaWeb-综合案 ...

  10. JavaScript学习笔记04【高级——DOM和事件的简单学习、BOM对象】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

最新文章

  1. 在VS2010中使用wxWidgets 2.9.3
  2. JSON数据和Java对象的相互转换
  3. Safari 10默认禁用Flash插件
  4. List 在迭代时可能抛出的异常
  5. java 搭建企业应用框架_java培训一般要学多久
  6. 快速使用Vue3最新的15个常用API
  7. Activity的呼叫转移*(3个Activity之间的跳转)
  8. xampp默认mysql数据库root密码的修改
  9. redistemplate怎么修改数据_如何使用RedisTemplate访问Redis数据结构?
  10. ECCV 2020 论文大盘点-光流篇
  11. CUDA内存分配、释放、传输,固定内存
  12. 2014第3周六升级win8.1
  13. 开源维护者,必有一战!
  14. Linux下防止rm -frv 删除错误的解决办法
  15. Mi11Pro刷机记录
  16. 4份简约实用自我介绍PPT模板,总有一份适合你
  17. python内置函数什么意思_python内置函数是什么
  18. cadence SPB17.4 - export placement file to openpnp
  19. TCP/IP学习心得
  20. 不出门远程控制公司电脑,这7个工具让你不用来回跑。

热门文章

  1. JavaScript进阶部分笔记
  2. LeetCode 题 - 66. 列表元素加一 python实现
  3. 服务器的数据库 mysql 开放远程连接
  4. 微信小程序云开发分页刷新获取数据
  5. qq互联开放平台 开源SDK共享 常见问题
  6. 【opencv学习】【图像的数值计算操作】
  7. docker常见面试题_测试面试题集锦(四)| Linux 与 Python 编程篇(附答案)
  8. PyQt5入门——删除、清空layout布局中的所有对象(含常见问题详解)
  9. 自然语言处理 —— 2.2 使用词嵌入
  10. Collections.shuffle()方法的使用