• 引用的时候需要在参数和使用的时候加上 ref 关键字
  •         static bool addnum (ref int val)    //引用
    {
    ++val;
    return true;
    }
  • 参数数组的概念,可以接受该类型的数组,不限制大小,关键字 params

  •         static int getlength (params int[] vals)    //参数数组
    {
    int sum = 0;
    foreach (int val in vals)
    {
    sum += val;
    }
    return sum;
    }
  • 输出参数的概念,类似参数数组,不过声明的时候可以不初始化

  •         static int MaxValue (int[] intArray, out int maxIndex)  //输出参数
    {
    int maxValue = intArray[0];
    maxIndex = 0;
    for (int i = 1; i < intArray.Length; ++i)
    {
    if (intArray[i] > maxValue)
    {
    maxValue = intArray[i];
    maxIndex = i;
    }
    }
    return maxValue;
    }
  • 委托 delegate : 委托的声明类似函数,但不带函数体,并且要使用 delegate 关键字。委托的声明指定了一个 返回类型 和一个 参数列表
  •         delegate double ProcessDelegate (double param1, double param2);
    
            static double Multiply (double param1, double param2)
    {
    return param1 * param2;
    } static double Divide (double param1, double param2)
    {
    return param1 / param2;
    } static void Main(string[] args)
    {
    ProcessDelegate process;
    string input = Console.ReadLine();
    if (input.CompareTo("M") == 0)
    {
    process = new ProcessDelegate (Multiply);
    }
    else
    {
    process = new ProcessDelegate(Divide);
    }
    double param1 = 3.123;
    double param2 = 23.12;
    Console.WriteLine("{0}", process(param1, param2));
    }
  • 指定类是抽象的 abstract,不能实例化,只能继承,可以有抽象成员
  •     abstract class MyClass1
    { }
  • 指定类是密封的 sealed, 不能继承
  •     sealed class MyClass2
    { }
  • 成员定义
    1. public     成员可以由任何代码访问
    2. private       成员由类中的代码访问
    3. internal  成员只能由定义它的程序集内部的代码访问
    4. protected   成员只能由类或派生类中的代码访问
  • 定义方法
    1. virtual     方法可以重写
    2. abstract   方法必须在非抽象类的派生类中重写
    3. override   方法重写了一个基类方法
    4. extern      方法定义放在其他地方
  • 接口实现

    • 不允许使用访问修饰符(public, private, protected, internal)
    • 接口成员不能包含代码体
    • 接口不能定义字段成员
    • 接口成员不能使用关键字 static, virtual, abstractm sealed
    • 类型定义成员是禁止的
    •     public interface IMyInterface //在类中实现接口
      {
      void DoSomething();
      void DoSomethingElse();
      } public class MyClass : IMyInterface
      {
      public void DoSomething()
      { }
      public void DosomethingElse()
      { }
      }
  • 泛型
    • 可空类型

      •   int? 是 System.Nullble <int>的缩
      •             int? op = 5;
        int? result1 = (int)op * 2;  //method 1
        int? result2 = op.Value * 2; //method 2 int? op1 = null;
        int? op2 = 5;
        int? result3 = op1 * op2;
    • ?? 运算符
      • op1 ?? op2
        op1 == null ? op2 : op1
  • 泛型类 List
    •   

          class Program
      {
      static void Main(string[] args)
      {
      List<Animal> animalCollection = new List<Animal>();
      animalCollection.Add(new Cow("Tom"));
      animalCollection.Add(new Dog("Dave")); foreach (Animal myAnimal in animalCollection)
      {
      Console.WriteLine(myAnimal.GetName());
      }
      }
      }
  • 属性的访问器
  • 包含与获取(读取或计算)或设置(写)属性有关的可执行语句。访问器声明可以包含 get 访问器或 set 访问器,或者两者均包含。
    • get {}

      • get 访问器体与方法体相似。它必须返回属性类型的值。执行 get 访问器相当于读取字段的值。以下是返回私有字段 name 的值的 get 访问器:
      •   
        private string name;   // the name field
        public string Name // the Name property
        {
        get
        {
        return name;
        }
        }
      • 当引用属性时,除非该属性为赋值目标,否则将调用 get 访问器读取该属性的值。例如:

        Employee e1 = new Employee(); ... Console.Write(e1.Name);

      • // The get accessor is invoked here get 访问器必须在 return 或 throw 语句中终止,并且控制不能超出访问器体。

    • set {}
      • set 访问器与返回 void 的方法类似。它使用称为 value 的隐式参数,此参数的类型是属性的类型。在下例中,set 访问器被添加到 Name 属性:
      • public string Name
        {
        get
        {
        return name;
        }
        set
        {
        name = value;
        }
        }
      • 当对属性赋值时,用提供新值的参数调用 set 访问器。例如:

        e1.Name = "Joe";

      • // The set accessor is invoked here 在 set 访问器中对局部变量声明使用隐式参数名 (value) 是错误的。

    • // property_hiding.cs
      // Property hiding
      using System;
      public class BaseClass
      {
      private string name;
      public string Name
      {
      get
      {
      return name;
      }
      set
      {
      name = value;
      }
      }
      } public class DerivedClass : BaseClass
      {
      private string name;
      public new string Name // Notice the use of the new modifier
      {
      get
      {
      return name;
      }
      set
      {
      name = value;
      }
      }
      } public class MainClass
      {
      public static void Main()
      {
      DerivedClass d1 = new DerivedClass();
      d1.Name = "John"; // Derived class property
      Console.WriteLine("Name in the derived class is: {0}",d1.Name);
      ((BaseClass)d1).Name = "Mary"; // Base class property
      Console.WriteLine("Name in the base class is: {0}",
      ((BaseClass)d1).Name);
      }
      }

      Example Code

  • #region  DisaplayName
  • #endregion
    • 用来注释中间代码 的作用 而且在其他地方用到中间的类和方法 都会有你标注的注释
    • 本身不参与编译 还可以缩进代码 方便阅览折叠代码
      •   

          //   preprocessor_region.cs
        #region MyClass definition
        public class MyClass
        {
        public static void Main()
        {
        }
        }
        #endregion

C# Programming Study #1的更多相关文章

  1. C# Programming Study #2

    readonly (C# Reference) readonly  关键字是可以在字段上使用的修饰符.  当字段声明包括 readonly 修饰符时,该声明引入的字段赋值只能作为声明的一部分出现,或者 ...

  2. Linux: bash script

    content [toc] bash scripts equivalent bash command to rename a bash variable/command alias fire='fir ...

  3. 随机生成&部门匹配

    整体概况 1.完整程序概况 (1)程序整体构架 (2)生成程序模型 (3)匹配算法模型 (4)生成结果评估 (5)命名规范 (6)先期和后期分工 2.心路历程与对全新的java认识(心得体会篇) (1 ...

  4. Beginning Scala study note(4) Functional Programming in Scala

    1. Functional programming treats computation as the evaluation of mathematical and avoids state and ...

  5. study notes: high performance linux server programming

    1:linux网络API分为:socker地址API,socker基础API,网络信息API 1,socker地址API:包含IP地址和端口(ip, port).表示TCP通信的一端. 2,socke ...

  6. Programming Learning - Based on Project

    Today when taking a bath I got a good idea that it is an efficient and interesting way to learn a ne ...

  7. Dynamic Programming

    We began our study of algorithmic techniques with greedy algorithms, which in some sense form the mo ...

  8. Case Study: Random Number Generation(翻译教材)

    很荣幸,经过三天的努力.终于把自己翻译的教材做完了,现在把它贴出来,希望能指出其中的不足.   Case Study: Random Number Generation Fig. 6.7  C++ 标 ...

  9. PHP Laravel框架入门心得 | How to study PHP Laravel Framework

    PHP有不少开发框架,其中比较出名的有Symfony和Laravel. 我说说我最近入门Laravel的感受和学习方法吧. 1.第一个感受是Laravel的社区讨论和学习资源真的是太棒了,中文化也做得 ...

随机推荐

  1. HDU 3374 String Problem (KMP+最小最大表示)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3374 [题目大意] 给出一个字符串,求出最小和最大表示是从哪一位开始的,并且输出数量. [题解] ...

  2. uva-12657 - Boxes in a Line(双向链表)

    12657 - Boxes in a Line You have n boxes in a line on the table numbered 1 . . . n from left to righ ...

  3. 发送请求工具—Advanced REST Client

    Advanced REST Client是Chrome浏览器下的一个插件,通过它能够发送http.https.WebSocket请求.在Chrome商店下搜索Advanced REST Client, ...

  4. .NET + Jcrop 实现在线裁图功能

    最近有这样一个需求,因为一个门户网站首页展示图片很长但很矮,自己截图怕有不到位,所以利用JQUERY 的 Jcrop组件做了一个在线裁图的功能. 初始化 $('#oldpicImg').Jcrop({ ...

  5. 如何在windows server 2012 R2 部署WEB项目

    tip: 今天发布项目到windows server 2012 R2上面. 没有接触过,其实很简单,看图: 这是安装IIS成功后显示的总图: 二.点击Manage ,选择Add Roles and F ...

  6. zoj 3714 Java Beans

    /*很简单的一题,求连续的m位,求总和最多的值,循环找一下,就出来了*/ #include<stdio.h> ]; int main(int argc, char* argv[]) { i ...

  7. 转--Windows下将jar包封装成服务程序

    http://www.cppblog.com/aurain/archive/2014/01/23/205534.aspx 1 准备 使用工具Procrun(http://commons.apache. ...

  8. 浅谈Servlet读取Html参数

    1首先:webApp名称为cookieAndsession.html文件一般放在WebRoot文件夹下:/cookieAndsession/WebRoot/OrderForm.html,那么外界要访问 ...

  9. linux下静态链接库的用法

    最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误: (.text+0x13): undefined reference to `func' 关于unde ...

  10. CSS 文章段落样式

    #adiv p { text-align: left; text-indent: 2em; line-height:25px; font-family:微软雅黑; font-size:medium; ...