• 引用的时候需要在参数和使用的时候加上 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. lambda表达式和闭包

    lambda表达式和闭包 熟悉的Javascript或者Ruby的同学,可能对另一个名词:闭包更加熟悉.因为一般闭包的示例代码,长得跟lambda差不多,导致我也在以前很长一段时间对这两个概念傻傻分不 ...

  2. HDU 4464 Browsing History(最大ASCII的和)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4464 Problem Description One day when you are going t ...

  3. linux之vim配置

    代码自动补全和代码跳转阅读,应该是作为程序员最常用的功能之一了,具体二者是指什么我就不解释了.微软的Visual Studio就是靠这两样必杀技牢牢占据着广大windows程序员的心(这里面要有强大的 ...

  4. C# 委托和方法

    委托是一种特殊的引用类型,它将方法也作为特殊的对象封装起来,从而将方法作为变量或参数进行传递 using System; using System.Collections.Generic; using ...

  5. UVa12563(DP)

    题意:求在给定时间内,最多能唱多少歌曲,在最多歌曲的情况下,使唱的时间最长. 该题类似于01背包问题,可用01背包问题的解题思路来求,每个歌曲相当于物品,歌曲的长度相等于物品重量,每个歌曲的“价值”为 ...

  6. (转)原子操作 Interlocked系列函数

    上一篇<多线程第一次亲密接触 CreateThread与_beginthreadex本质区别>中讲到一个多线程报数功能.为了描述方便和代码简洁起见,我们可以只输出最后的报数结果来观察程序是 ...

  7. 射频识别技术漫谈(16)——Mifare UltraLight

    Mifare UltraLight又称为MF0,从UltraLight(超轻的)这个名字就可以看出来,它是一个低成本.小容量的卡片.低成本,是指它是目前市场中价格最低的遵守ISO14443A协议的芯片 ...

  8. python3 ImageTk 安装方法

    使用命令: $ sudo yum search PIL | grep python3 可显示得知: python3-dogpile-cache.noarch : A caching front-end ...

  9. Java中volatile的作用以及用法

    volatile让变量每次在使用的时候,都从主存中取.而不是从各个线程的“工作内存”. volatile具有synchronized关键字的“可见性”,但是没有synchronized关键字的“并发正 ...

  10. [置顶] 【J2SE 】1136 容器之旅

    开篇引言 本篇文章我将要详细的介绍一下什么是容器?以及什么是1136?来系统全面的了解容器,以及容器的应用,下面就进入我们的容器之旅吧! 1.什么是容器? 用来存储和组织其他对象的对象.我们也可以这样 ...