加入收藏 | 设为首页 | 会员中心 | 我要投稿 百科站长网 (https://www.baikewang.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

《C# 教程》菜鸟教程学习笔记

发布时间:2022-11-18 14:46:29 所属栏目:安全 来源:
导读:  type* identifier
  C# 类型转换

  类型转换从根本上说是类型铸造,或者说是把数据从一种类型转换为另一种类型。在 C# 中,类型铸造有两种形式:

  C# 变量

  一个变量只不过是一个供程序
    type* identifier
  C# 类型转换
 
  类型转换从根本上说是类型铸造,或者说是把数据从一种类型转换为另一种类型。在 C# 中,类型铸造有两种形式:
 
  C# 变量
 
  一个变量只不过是一个供程序操作的存储区的名字。在 C# 中,每个变量都有一个特定的类型,类型决定了变量的内存大小和布局。范围内的值可以存储在内存中,可以对变量进行一系列操作。
 
  C# 常量
 
  常量是固定值,程序执行期间不会改变。常量可以是任何基本数据类型,比如整数常量、浮点常量、字符常量或者字符串常量,还有枚举常量。
 
  常量可以被当作常规的变量,只是它们的值在定义后不能被修改。
 
  C# 运算符
 
  其他运算符
 
  下表列出了 C# 支持的其他一些重要的运算符,包括 sizeof、typeof 和 ? :。
 
  添加:
 
  ?? 运算符称作 null 合并运算符。 如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数。
 
  C# 判断
 
  判断结构要求程序员指定一个或多个要评估或测试的条件,以及条件为真时要执行的语句(必需的)和条件为假时要执行的语句(可选的)。
 
  C# 循环
 
  C# 封装
 
  封装 被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中"。在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。
 
  C# 封装根据具体的需要,设置使用者的访问权限,并通过 访问修饰符 来实现。
 
  一个 访问修饰符 定义了一个类成员的范围和可见性。C# 支持的访问修饰符如下所示:
 
  C# 方法
 
  ref和out的区别在C# 中,既可以通过值也可以通过引用传递参数。通过引用传递参数允许函数成员更改参数的值,并保持该更改。若要通过引用传递参数, 可使用ref或out关键字。ref和out这两个关键字都能够提供相似的功效,其作用也很像C中的指针变量。它们的区别是:
 
  1、使用ref型参数时,传入的参数必须先被初始化。对out而言,必须在方法中对其完成初始化。
 
  2、使用ref和out时,在方法的参数和执行方法时,都要加Ref或Out关键字。以满足匹配。
 
  3、out适合用在需要retrun多个返回值的地方,而ref则用在需要被调用的方法修改调用者的引用的时候。
 
  out
 
  方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。
 
  当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一个值。一个方法可以有一个以上的 out 参数。
 
  若要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数。
 
  不必初始化作为 out 参数传递的变量。然而,必须在方法返回之前为 out 参数赋值。
 
  属性不是变量,不能作为 out 参数传递。
 
  C# 可空类型(Nullable)
 
  C# 提供了一个特殊的数据类型,nullable 类型(可空类型),可空类型可以表示其基础值类型正常范围内的值网站安全代码,再加上一个 null 值。
 
  声明一个 nullable 类型(可空类型)的语法如下:
 
  < data_type> ?  = null;
  Null 合并运算符( ?? )
 
  Null 合并运算符用于定义可空类型和引用类型的默认值。Null 合并运算符为类型转换定义了一个预设值,以防可空类型的值为 Null。Null 合并运算符把操作数类型隐式转换为另一个可空(或不可空)的值类型的操作数的类型。
 
  例如:
 
  int y = x ?? 1;
 
  假设此时x == null ,那么就将1赋值给y;
 
  C# 数组(Array)
 
  数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合,通常认为数组是一个同一类型变量的集合。
 
  所有的数组都是由连续的内存位置组成的。最低的地址对应第一个元素,最高的地址对应最后一个元素。
 
  C# 类(Class)
 
   ~Line() //析构函数
        {
           Console.WriteLine("对象已删除");
        }
  C# 文件的输入与输出
 
  一个 文件 是一个存储在磁盘中带有指定名称和目录路径的数据集合。当打开文件进行读写时,它变成一个 流。
 
  从根本上说,流是通过通信路径传递的字节序列。有两个主要的流:输入流 和 输出流。输入流用于从文件读取数据(读操作),输出流用于向文件写入数据(写操作)。
 
  FileStream 类
 
  C# 高级教程C# 特性(Attribute)
 
  特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的。
 
  特性(Attribute)用于添加元数据,如编译器指令和注释、描述、方法、类等其他信息。.Net 框架提供了两种类型的特性:预定义特性和自定义特性。
 
  [attribute(positional_parameters, name_parameter = value, ...)]
  element
  [AttributeUsage(
     validon,
     AllowMultiple=allowmultiple,
     Inherited=inherited
  )]
  2.Conditional
 
  这个预定义特性标记了一个条件方法,其执行依赖于指定的预处理标识符。
 
  它会引起方法调用的条件编译,取决于指定的值,比如 Debug 或 Trace。例如,当调试代码时显示变量的值。
 
  [Conditional("DEBUG")]
  3.Obsolete
 
  这个预定义特性标记了不应被使用的程序实体。它可以让您通知编译器丢弃某个特定的目标元素。例如,当一个新方法被用在一个类中,但是您仍然想要保持类中的旧方法,您可以通过显示一个应该使用新方法,而不是旧方法的消息,来把它标记为 obsolete(过时的)。
 
  [Obsolete(
     message
  )]
  [Obsolete(
     message,
     iserror
  )]
  C# 反射(Reflection)
 
  反射指程序可以访问、检测和修改它本身状态或行为的一种能力。
 
  程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。
 
  您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。
 
  优点:
 
  反射(Reflection)的用途查看元数据
 
  System.Reflection.MemberInfo info = typeof(MyClass);
  C# 属性(Property)
 
  属性(Property) 是类(class)、结构(structure)和接口(interface)的命名(named)成员。类或结构中的成员变量或方法称为 域(Field)。属性(Property)是域(Field)的扩展,且可使用相同的语法来访问。它们使用 访问器(accessors) 让私有域的值可被读写或操作。
 
  属性(Property)不会确定存储位置。相反,它们具有可读写或计算它们值的 访问器(accessors)。
 
  例如,有一个名为 Student 的类,带有 age、name 和 code 的私有域。我们不能在类的范围以外直接访问这些域,但是我们可以拥有访问这些私有域的属性。
 
  访问器(Accessors)
 
  属性(Property)的访问器(accessor)包含有助于获取(读取或计算)或设置(写入)属性的可执行语句。访问器(accessor)声明可包含一个 get 访问器、一个 set 访问器,或者同时包含二者。
 
  C# 索引器(Indexer)
 
  索引器(Indexer) 允许一个对象可以像数组一样被索引。当您为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array) 一样。您可以使用数组访问运算符([ ])来访问该类的实例。
 
  语法
 
  一维索引器的语法如下:
 
  element-type this[int index]
  {
     // get 访问器
     get
     {
        // 返回 index 指定的值
     }
     // set 访问器
     set
     {
        // 设置 index 指定的值
     }
  }
  索引器(Indexer)的用途
 
  索引器的行为的声明在某种程度上类似于属性(property)。就像属性(property),您可使用 get 和 set 访问器来定义索引器。但是,属性返回或设置一个特定的数据成员,而索引器返回或设置对象实例的一个特定值。换句话说,它把实例数据分为更小的部分,并索引每个部分,获取或设置每个部分。
 
  using System;
  namespace IndexerApplication
  {
     class IndexedNames
     {
        private string[] namelist = new string[size];
        static public int size = 10;
        public IndexedNames()
        {
           for (int i = 0; i < size; i++)
           namelist[i] = "N. A.";
        }
        public string this[int index]
        {
           get
           {
              string tmp;
              if( index >= 0 && index <= size-1 )
              {
                 tmp = namelist[index];
              }
              else
              {
                 tmp = "";
              }
              return ( tmp );
           }
           set
           {
              if( index >= 0 && index <= size-1 )
              {
                 namelist[index] = value;
              }
           }
        }
        static void Main(string[] args)
        {
           IndexedNames names = new IndexedNames();
           names[0] = "Zara";
           names[1] = "Riz";
           names[2] = "Nuha";
           names[3] = "Asif";
           names[4] = "Davinder";
           names[5] = "Sunil";
           names[6] = "Rubic";
           for ( int i = 0; i < IndexedNames.size; i++ )
           {
              Console.WriteLine(names[i]);
           }
           Console.ReadKey();
        }
     }
  }
  重载索引器(Indexer)
 
  索引器(Indexer)可被重载。索引器声明的时候也可带有多个参数,且每个参数可以是不同的类型。没有必要让索引器必须是整型的。C# 允许索引器可以是其他类型,例如,字符串类型。
 
  using System;
  namespace IndexerApplication
  {
     class IndexedNames
     {
        private string[] namelist = new string[size];
        static public int size = 10;
        public IndexedNames()
        {
           for (int i = 0; i < size; i++)
           {
            namelist[i] = "N. A.";
           }
        }
        public string this[int index]
        {
           get
           {
              string tmp;
              if( index >= 0 && index <= size-1 )
              {
                 tmp = namelist[index];
              }
              else
              {
                 tmp = "";
              }
              return ( tmp );
           }
           set
           {
              if( index >= 0 && index <= size-1 )
              {
                 namelist[index] = value;
              }
           }
        }
        public int this[string name]
        {
           get
           {
              int index = 0;
              while(index < size)
              {
                 if (namelist[index] == name)
                 {
                  return index;
                 }
                 index++;
              }
              return index;
           }
        }
        static void Main(string[] args)
        {
           IndexedNames names = new IndexedNames();
           names[0] = "Zara";
           names[1] = "Riz";
           names[2] = "Nuha";
           names[3] = "Asif";
           names[4] = "Davinder";
           names[5] = "Sunil";
           names[6] = "Rubic";
           // 使用带有 int 参数的第一个索引器
           for (int i = 0; i < IndexedNames.size; i++)
           {
              Console.WriteLine(names[i]);
           }
           // 使用带有 string 参数的第二个索引器
           Console.WriteLine(names["Nuha"]);
           Console.ReadKey();
        }
     }
  }
  C# 委托(Delegate)
 
  C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。
 
  委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 System.Delegate 类。
 

(编辑:百科站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!