• 引用的时候需要在参数和使用的时候加上 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. LRU算法的设计

    一道LeetCode OJ上的题目,要求设计一个LRU(Least Recently Used)算法,题目描述如下: Design and implement a data structure for ...

  2. c 跟字符串有关的函数

    1.字符串查找 strstr char * strstr(const char *s1, const char *s2); 在s1中查找s2,如果找到返回首个s2的首地址 char * strcase ...

  3. HDU Tickets(简单的dp递推)

    Tickets Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  4. 【JS控制图片显示的大小(图片等比例缩放)】

    效果: 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www ...

  5. DataSet中取值(转)

    1 DataSet.Table[0].Rows[ i ][ j ] 其中i 代表第 i 行数, j 代表第 j 列数 2 DataSet.Table[0].Rows[ i ].ItemArray[ j ...

  6. virtualbox中新版本Ubuntu安装软件增强包后重启无限登录界面的解决办法

    原来我虚拟机版本是4.2.10,装的Ubuntu3.3,因为版本过老使用出现了一些问题,于是换成14.04,安装成功,但是装增强包的时候,装完重启,无限登录界面,密码是对的. 看了网上的很多方法,什么 ...

  7. 关于$.ajax的请求格式

    1 $.ajax({ 2 url: "http://localhost:5311/UserService.asmx/GetLoginId",//请求的URL 3 type: &qu ...

  8. Bootstrap第一天

    1.代码引入: 第一步:在html5文档 <meta name="viewport" content="width=device-width, initial-sc ...

  9. Dokcer 组成原理简介

    首先来张图了解Docker的组成 重要 Docker在启动容器的时候,需要创建文件系统,为rootfs提供挂载点.最初Docker仅能在支持Aufs文件系统的Linux发行版上运行,但是由于Aufs未 ...

  10. java断言

    public class New{ public static void main(String[] args){ assert false; System.out.println("pas ...