C#高级编程十二天----函数

2023-11-21 11:08

本文主要是介绍C#高级编程十二天----函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

类和结构

类和结构实际上都是创建对象的模板 ,每 个对象都包含数据 ,并 提供了处理和访问数据的方法。

类定义了类的每个对象 (称 为实例 )可 以包含什么数据和功能 。 

例如 ,如 果 一 个类表示 一 个顾客 ,就可以定义字段 CustomerID、 FirstName、 LastNane和 Address,以 包含该顾客的信息 。还可以定义处理在这些字段中存储的数据的功能 。 接着 ,就 可以实例化表示某个顾客的类的对象 ,为 这个实例设置相关字段的值 ,并 使用其功能 。

 

例如有一个PgoneCustomer

class PgoneCustomer

{

public const string DayOfSendingBill=”Monday”;

public int CustomerID;

public string FirstName;

public string LastName;

}

 

结构

struct PgoneCustomerStruct

{

public const string DayOfSendingBill=”Monday”;

public int CustomerID;

public string FirstName;

public string LastName;

}

 

结构与类的区别使他们在内存中的存储方式,访问方式(类是存储在堆(heap)上的引用类型,而结构的存储在栈上的值类型)和他们的一些特征(如结构不支持继承).较小的数据类型使用结构可提高性能.但在语法上,结果和类很相似.主要区别是使用关键字struct代替class来声明结构.结构的实例都分布在栈上,类的实例分布在托管堆上.

 

类的结构都使用关键字ner来声明实例:这个关键字穿件对象并对对象进行初始化.

PhoneCustomer myCustomer=new PhoneCustomer();

PhoneCustomerStruct myCustomer2=new PhoneCustomerStruct();

 

多数情况下,类的使用较多,类中的数据和函数叫做成员.类还可以包含嵌套的类型.成员的可访问性可以是:public,private,intermal,protected.

 

数据成员是包含类的数据----字段,常量和事件的成员.数据成员可以是静态数据.类成员总是实例成员,除非用static进行显示的声明.一旦实例化PhoneCustomer对象,就可以实用语法Object.ieldName来访问这些字段,:

PhoneCustomer Customer1=new PhoneCustomer();

Customer1.FirstName=”syx”;

使用const关键字来声明常量.如果声明为public,就可以在类的外部访问它.

class PhoneCustomer

{

public const string DaySendingBill = “Monday”;

public int CustomerID;

public string FirstName;

public string lastName;

}

事件是类的成员,在发生某些行为(如改变类的字段火属性,或者进行了某种形式的用户交互操作),他可以让对象通知调用方.客户可以包含所谓的”事件处理程序”的代码来响应该事件.

 

函数成员

函数成员提供了操作类中数据的某些功能 ,包括方法、属性、构造函数和终结器,运算符以及索引器.

方法

注意,正式的C#术语区分函数和方法.C#术语中,”函数成员”不仅包含方法,而且也包含类或结构的一些费数据成员,如索引器,运算符,构造函数和析构函数等.

1.方法的声明

[修饰符返回值类型 函数名 (参数列表)

{

函数代码

}

2.调用方法

例如有一个方法:

public void ShowHello(string name)

{

Console.WriteLine(name+”say : hello”);

}

调用的时候

static void Main()

{

ShowHello(“zhangsan”);

 

}

3.给方法传递参数

就是参数列表里需要什么类型,需要几个就传递几个

4.ref,     out,     params的使用

 

ref的特点是有进有出,即在传递参数之前就已经对它进行赋值,在传入方法体时,是将该数的地址传了进来,如果对其进行相应的赋值操作,直接改的是地址里的值,所以,当该方法执行完,该数的值也就跟着改变了。

代码如下:

        static void Main(string[] args)
        {
            int i = 10;
            FF( ref i);
            Console.WriteLine(i);
        }

        static void FF(ref int i)
        {
            i = i + 1;
        }

如果没有ref

static void Main(string[] args)

        {

            int i = 10;

            FF(i);

            Console.WriteLine(i);

            Console.ReadKey();

        }

        static void FF(int i)

        {

            i = i + 1;

        }

ref的作用这样一比较是不是很清楚了.refC中的指针相似.

outref的唯一区别是,在方法接收参数后,对它进行初始化(如果没有初始化,将会报错的),其余的用法都和ref一样。

static void Main(string[] args)
        {
            int i ;
            FF( out i);
            Console.WriteLine(i);
        }

        static void FF(out int i)
        {

            i=10; //如果没有这个赋值,系统将会报错的
            i = i + 1;
        }

 

out的使用案例

  public static void outfun(out string str)
  {
   str = "test";     //必须在函数体内初始如无此句,则下句无 法执行,报错
   str += " fun";
  }

static void Main(string[] args)
  {
   string test1 = "syx";
   string test2;                  //没有初始
    outfun( out test1 );    //正确,但值syx无法传进去
   outfun( out test2 );    //正确

   Console.Read();
  }

在调用含有outref函数的参数的时候,调用的时候需要显式的指明out或者ref.out存在的意义,个人认为是返回多个值.

声明一个函数,在函数结束的时候,我想得到i改变后的值,也想得到j改变后的值,就可以使用out关键字.但是在调用的时候,需要实参前面加上关键字out.

public static int outfun(ref int i,out int j)

        {

            i = 10;

            j = i+10;

            return i;

        }        

        static void Main(string[] args)

        {

            int a = 1;

            int b;            

            Console.WriteLine(a + "    " + b);            

            Console.ReadKey();

        }

 

ref是有进有出,而out是只出不进。

为了将方法声明为可以接受可变数量参数的方法,我们可以使用params关键字来声明数组,如下所示:

public static Int32Add(params Int32[] values)

{

     Int  sum = 0;

     for (Int32 x = 0; x < values.Length; x++)

     {

     sum += values[x];

     }

     return sum;

}

     只有方法的最后一个参数才可以标记params,该参数必须标识一个一维数组,但类型不限。对方法的最后一个参数传递null或者0个数目的数组的引用都是合法的.

在调用的时候,即可以传递一个数组,也可以传递一组数.例如:

 static void Main(string[] args)

        {

            int sum = GetSum(1, 2, 3, 4, 5, 6, 7, 8);

            Console.WriteLine(sum);

            int[] arrs = { 1, 2, 3, 4, 5, 6 };

            int sum2 = GetSum(arrs);

            Console.WriteLine(sum2);

            Console.ReadKey();

        }

最后总结一下ref,out,param存在的意义.

ref:相当于C中的指针,让参数传址引用.

out:返回多个数.

param:支持可变参数,但是一定要放在最后.

这篇关于C#高级编程十二天----函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/401967

相关文章

C#提取PDF表单数据的实现流程

《C#提取PDF表单数据的实现流程》PDF表单是一种常见的数据收集工具,广泛应用于调查问卷、业务合同等场景,凭借出色的跨平台兼容性和标准化特点,PDF表单在各行各业中得到了广泛应用,本文将探讨如何使用... 目录引言使用工具C# 提取多个PDF表单域的数据C# 提取特定PDF表单域的数据引言PDF表单是一

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

C#实现添加/替换/提取或删除Excel中的图片

《C#实现添加/替换/提取或删除Excel中的图片》在Excel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更加美观,下面我们来看看如何在C#中实现添加/替换/提取或删除E... 在Excandroidel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

c# checked和unchecked关键字的使用

《c#checked和unchecked关键字的使用》C#中的checked关键字用于启用整数运算的溢出检查,可以捕获并抛出System.OverflowException异常,而unchecked... 目录在 C# 中,checked 关键字用于启用整数运算的溢出检查。默认情况下,C# 的整数运算不会自

C#实现获得某个枚举的所有名称

《C#实现获得某个枚举的所有名称》这篇文章主要为大家详细介绍了C#如何实现获得某个枚举的所有名称,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... C#中获得某个枚举的所有名称using System;using System.Collections.Generic;usi

C# 读写ini文件操作实现

《C#读写ini文件操作实现》本文主要介绍了C#读写ini文件操作实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、INI文件结构二、读取INI文件中的数据在C#应用程序中,常将INI文件作为配置文件,用于存储应用程序的