博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
4.类与结构
阅读量:6786 次
发布时间:2019-06-26

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

引言:类是c#的核心内容之一,当我们把所有的方面都分成一类又一类时,我们只需要在主程序中调用各个类的方法便可以轻易实现很多复杂的功能,面向对象编程是绝对离不开类的。类与结构有着差不多的结构和用法,本博文重点介绍类的使用,最后粗略介绍结构的特有用法。

 

 

 4.1 方法

 (1)方法的声明

  [modifiers] return_type MethodName([parameters])

{

//MethdBody

}

modifiers是指方法的可访问性,return_type是指返回值的类型,MethodName是方法名,parameters时方法的参数,以及最后的方法体。尤其注意,如果方法有返回值,return语句就必须与返回值一起使用。如果方法没有返回值,就可以把返回的类型指定为void。

(2)方法的调用

View Code
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5  6 namespace 方法声明与调用 7 { 8     class MathTry 9     {10 11         public int value;12         public int GetSquare()//非静态不带参数方法13         {14             return value * value;15         16         }17 18         public static int GetSquareOf(int x)//静态带参数方法19         {20             return x * x;21         22         }23         public static double GetPi()//静态不带参数方法24         {25             return 3.1415926;26 27         }28         public double GetSquareOf(double x)//非静态带参数方法29         {30             return x * x;31 32         }33     34     }35     class Program36     {37 38         static void Main(string[] args)39         {40             //下面调用静态方法:静态方法可以使用类名直接调用!41             Console.WriteLine("Pi is:"+MathTry.GetPi());42             Console.WriteLine("Square of 5 is:"+MathTry.GetSquareOf(5));43             //下面引用非静态方法,首先需要实例化类:44             MathTry math = new MathTry();45             math.value = 10;46             Console.WriteLine("The Squre is:"+math.GetSquare());47             Console.WriteLine("Square of 20.0 is:" + math.GetSquareOf(20.0));48 49         }50     }51 }

 

尤其注意静态方法的调用,不需要实例化对象。

(3)传递参数

 

View Code
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5  6 namespace 方法参数传递 7 { 8     class ParameterTest 9     {10       public static void SomeFuction(int[] ints,int i)11         {12 13             ints[0] = 100;14             i = 100;15         16         17         }18       public static void SomeFuction(string j)19       {20 21           22           j = "sharp也疯狂!";23 24 25       }26     27     28     }29 30 31 32     class Program33     {34          static void Main(string[] args)35         {36             int i = 0;37             int[] ints = {
0,1,2,4,8};38 string j = "sharp";39 Console.WriteLine("在没有传递参数之前:");40 Console.WriteLine("i="+i);41 Console.WriteLine("ints[0]="+ints[0]);42 Console.WriteLine("j=" + j);43 Console.WriteLine("在传递参数之后:");44 ParameterTest.SomeFuction(ints,i);45 Console.WriteLine("i=" + i);46 Console.WriteLine("ints[0]=" + ints[0]);47 ParameterTest.SomeFuction(j);48 Console.WriteLine("j=" + j);49 }//以上代码说明,值类型传递之后,立即覆盖方法本身的自己的值,而引用型则会继续保持方法体自己的值,但是string这个引用型是个特例,其特点遵循值的引用。50 }51 }

 

值得注意的是,如果在方法的参数中添加ref关键字,可以迫使参数通过引用传递给方法,调用时也需要ref关键字,那么该方法对变量所做的任何改变都会影响原始对象的值。将上述代码的int i前加上ref关键字以及最后的调用也添加上ref关键字后,运行结果如下图所示:

还有一种情况是out关键字的用法,它可以避免c#所坚持的输入参数的初始化,在方法的输入参数前加上out关键字可以避免传递给该方法的变量的初始化,out关键字也是以强制引用型的转化。将以上代码的ref关键字改为out关键字后,其输出结果和上图一样。

c#支持方法重载,但是需要注意的是:1.两个方法不能仅在返回类型上有区别;2.两个方法不能仅仅根据参数声明为ref还是out来区分。

 4.2 构造函数

声明构造函数就是声明一个与包含的类的同名的没有返回类型的方法。如果没有编写构造函数,那么编译器会创建一个默认的构造函数,而这个构造函数仅仅用来把所有的成员字段初始化为标准的默认值,如果编写了带参数的构造函数,编译器便会调用用户自己编写的构造函数而不会创建默认的构造函数,构造函数根据参数的不同,可以有不同的重载。

主要介绍:静态构造函数

静态构造函数只执行一次,主要用于初始化静态字段和属性,静态构造函数不带任何参数并且只能访问静态成员。

View Code
1 using System; 2 using System.Drawing; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Text; 6  7 namespace 静态构造函数 8 { 9     public class UserPreferences10     {11         public static readonly Color BackColor;12         static UserPreferences()13         {14             DateTime now = DateTime.Now;15             if (now.DayOfWeek == DayOfWeek.Saturday || now.DayOfWeek == DayOfWeek.Sunday)16 17                 BackColor = Color.Green;18             else19                 BackColor = Color.Red;20         21         }22     23     24     25     26     27     }28 29 30     class Program31     {32         static void Main(string[] args)33         {34             Console.WriteLine("The color is :"+UserPreferences.BackColor.ToString());35         }36     }37 }

 

4.3 只读字段

常量不能修改,为此诞生了只读字段,只读字段使用关键字readonly声明。可以在构造函数中给只读字段赋值。

结构:

结构使用关键字struct声明,替代了class。大部分结构上结构与类相同,但是需要注意一下几点:

  1. 结构是值类型
  2. 结构不支持继承
  3. 结构的构造函数的工作方式有区别,编译器总是提供一个无参数的默认构造函数,并且不能被替换
  4. 使用结构可以指定字段如何在内存中布局

转载于:https://www.cnblogs.com/sharp-c/archive/2012/09/01/2664549.html

你可能感兴趣的文章
silverlight渐隐效果
查看>>
使用Docker实现php代码在线测试执行工具-toolfk.com
查看>>
簡單範例 mergecap,wireshark 付屬程式
查看>>
网络文件传输学习
查看>>
Installation Oracle11gR2 RAC One Node ---创建数据库
查看>>
spring 通过EsClientFactory注入elasticsearch
查看>>
打造中国第一品牌安全网关
查看>>
Android定位功能(二)
查看>>
tomcat的安装及配置
查看>>
用Jquery处理PHP返回的JSON格式数据的三种方法
查看>>
servlet基础
查看>>
云盾防Ddos文献之敌情篇 ——DDoS***原理
查看>>
detached entity passed to persist异常解决
查看>>
批量递归转换目录下pdf文件到swf
查看>>
进程占用cpu资源过多负载高的原因分析及解决步骤
查看>>
setDefaultKeyMode 用法介绍
查看>>
Ubuntu 13.04 精简
查看>>
32中常用算法
查看>>
为什么你的手机会时不时地掉一下线
查看>>
强大的矢量图形库:Raphael JS 中文帮助文档及教程
查看>>