博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# Programming Study #1
阅读量:5020 次
发布时间:2019-06-12

本文共 5071 字,大约阅读时间需要 16 分钟。

  • 引用的时候需要在参数和使用的时候加上 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 ?? op2op1 == null ? op2 : op1

         

  • 泛型类 List
    •   
      class Program    {        static void Main(string[] args)        {            List
      animalCollection = new List
      (); 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 fieldpublic 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 hidingusing 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

         

转载于:https://www.cnblogs.com/wushuaiyi/p/4632531.html

你可能感兴趣的文章
RedHat 7 安装postgresql 9.2
查看>>
CCNUOJ 1027 教你前缀
查看>>
actionbar、toolbar、menu之间的关系
查看>>
QQ网页交谈
查看>>
JavaScript:学习笔记(8)——对象扩展运算符
查看>>
笔试题 相对位置不变的正负数排序
查看>>
第一天
查看>>
mappingResource属性和mappingDirectoryLocations属性的使用
查看>>
NSString常用的技巧
查看>>
网络编程与并发编程相关网址链接
查看>>
通过python理解闭包
查看>>
linux面试题及答案
查看>>
MongoDB命令行操作
查看>>
Android平台一些流行的使用3D技术开发的锁屏
查看>>
近期的一点感慨
查看>>
用Html5结合Qt制作一款本地化EXE游戏-太空大战(Space War)
查看>>
python操作Oracle
查看>>
Poj1753 Flip Game
查看>>
表头固定,表的主体设置滚动条,同时解决错位问题
查看>>
Codeforces Round #527 -A. Uniform String(思维)
查看>>