需要知道:类和方法的关系

方法和参数修饰符

自定义方法可以有或没有参数,也可以有或没有返回值。可以被各种关键字(static、virtual、public、new等)修饰以限制其行为。

                  C#参数修饰符

无                                       如果一个参数没有用参数修饰符标记,则认为它将按值传递,这意味着被调用的方法收到原始数据的一份副本。

out                                     输出参数由被调用的方法赋值,因此它按引用传递。如果被调用的方法没有给输出参数赋值,就会出现编译器错误。

ref                                         调用者赋初值,并且可以由被调用的方法可以选地重新赋值。如果被调用的方法未能给ref参数赋值,也不会编译器错误。

params                                 这个参数修饰符允许将一组可变数量的参数作为单独的逻辑参数进行传递。方法只能有一个params修饰符,而且必须是方法的最后一个参数。

默认的参数传递行为

引用类型:

不管这里传递的是值类型还是引用类型,传递之前和之后的值是不会变的。Add()方法里面操作的是数据的副本,不会影响到数据本身。就像在方法里面申明了一个参数来接受传递的参数,在方法里面操作的是新申明的参数如不是我们传递进去的参数。

In修饰符  C#7.2以上

in 关键字通过引用传递参数。 它类似于 ref 或 out 关键字,不同之处在于 in 参数无法通过调用的方法进行修改。 而 ref 参数是可以修改的,out 参数必须由调用方方法修改,且这些修改可以在调用上下文中看到。

   public void SampleMethod(in int i)  //7.2语法 中才能使用in,代表自读属性,方法中是不能修改的
{
}
public void SampleMethod(int i) { }

Out修饰符

out修饰符叫做输出参数。定义为带有输出参数(通过关键字out)的方法有义务在退出这个方法之前,给参数赋一个恰当的值。调用一个带有输出参数的方法也需要使用out修饰符。

规则:

①声明一个变量不赋值(赋值编译不会错)

②把此变量以Out形式传到方法里面

③调用方法后此变量就有值

ref修饰符

如果希望方法可以对在调用者作用域中声明的不同数据进行操作(通常改变它的值),例如:排序和交换例程,就需要使用引用参数。

输出参数不需要在它们被传递给方法之前初始化,因为方法在退出之前必修为输出参数赋值。

引用参数必须在它们被传递给方法之前初始化,因为是在传递一个对已存在变量的引用。

ref例子:

规则:

①声明一个变量(初始化)

②把参数以ref形式传递

③方法里做操作

Params修饰符

C#使用params关键字支持参数数组的使用。params关键字可以把可变数量的参数(相同类型)  作为单个逻辑参数传给方法。

注: 为了避免歧义(多重定义),C#要求方法只支持一个params参数,而且必须是参数列表中的最后一个参数。

定义可选参数

可选参数就是声明参数的时候已经赋值了,相同与有个初始值,调用者可以根据需求需不需要改变这个值。

注:可选参数的值是确定的而不是由编译的时候产生的。可选参数必须放在方法签名的最后。

使用命名参数调用方法

命名参数允许你在调用方法时以任何顺序指定参数的值。因此,你可以使用冒号操作符通过名称来指定 参数。

命名参数配合可选参数使用比较有效果。

方法重载

定义了一组名字相同的方法时,它们的参数数量(或类型)不同,这样的方法就叫做被重载。

例如:计算两个数的和,这就相同于一个重载

C#基础 一(方法详解)的更多相关文章

  1. Java基础之方法详解

    方法的所属性 在Java的语言中,方法相当于C语言中的函数,但是它与传统的函数也有着明确的不同:在结构化的语言中,函数是一等公民,整个程序是由一个个函数组成的:但是在面向对象的语言里,类是一等公民,整 ...

  2. java基础(十六)----- equals()与hashCode()方法详解 —— 面试必问

    本文将详解 equals()与hashCode()方法 概述 java.lang.Object类中有两个非常重要的方法: public boolean equals(Object obj) publi ...

  3. Python基础之 urllib模块urlopen()与urlretrieve()的使用方法详解。

    Python urllib模块urlopen()与urlretrieve()的使用方法详解   1.urlopen()方法urllib.urlopen(url[, data[, proxies]]) ...

  4. 基础拾遗------webservice详解

    基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...

  5. Java提高篇——equals()与hashCode()方法详解

    java.lang.Object类中有两个非常重要的方法: 1 2 public boolean equals(Object obj) public int hashCode() Object类是类继 ...

  6. BigDecimal 使用方法详解

    BigDecimal 使用方法详解 博客分类: java基础 bigdecimalmultiplyadddivide  BigDecimal 由任意精度的整数非标度值 和 32 位的整数标度 (sca ...

  7. integer与int区别以及integer.values()方法详解

    声明:本文为博主转载文章,原文地址见文末. 知识点1:integer和int的区别 /* * int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Integer是java为 ...

  8. Python数据类型及其方法详解

    Python数据类型及其方法详解 我们在学习编程语言的时候,都会遇到数据类型,这种看着很基础也不显眼的东西,却是很重要,本文介绍了python的数据类型,并就每种数据类型的方法作出了详细的描述,可供知 ...

  9. $.ajax()方法详解 ajax之async属性 【原创】详细案例解剖——浅谈Redis缓存的常用5种方式(String,Hash,List,set,SetSorted )

    $.ajax()方法详解   jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Str ...

  10. 3、lvs调度方法详解

    3.lvs类型和调度方法详解    http://www.178linux.com/13570 集群:将多台主机组织起来满足某一特定需求: 集群类型: LB:Load Balancing, 负载均衡集 ...

随机推荐

  1. PHP一维数组去重方法array_unique()

    array_unique() :去除数组中的重复项,只适用于一维数组 它不像 sort()方法, eg:  $arraytest = array('tommy','tommy','abcd'); so ...

  2. Windows 那些坑

    Windows Qt搭建 安装Qt 选择MinGW或者MSVC(建议VC), qt自动检测编译器, 基本上不用配置 去掉UWP(Windows通用平台开始, 不同于传统的exe, 它可以运行在所有的W ...

  3. 强哥的分享--如何使用Spring Boot做一个邮件系统

    http://springboot.fun/ actuator是单机.集群环境下要使用Spring Boot Admin将各个单机的actuator集成越来 mvn clean package -Dm ...

  4. [转]微信小程序登录逻辑梳理

    本文转自:http://www.jianshu.com/p/d9996cafdb31 官方文档 文档相关地址: 用户登录 获取用户数据 用户数据的签名验证和加解密                   ...

  5. 4.kafka的安装部署

    为了安装过程对一些参数的理解,我先在这里提一下kafka一些重点概念,topic,broker,producer,consumer,message,partition,依赖于zookeeper, ka ...

  6. jQuery Custom PopUp Window

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. C++基础--字符串倒序输出

    (一)用基本的数组实现 #include "stdafx.h" #include <stdio.h> #include <string.h> int mai ...

  8. windows RT开发笔记:WinRT DLL及其调用研究

    一. 几个概念: WinRT : Windows Runtime, windows运行时.创建Windows运行时(WinRT)是为了在Windows上给用户提供一种流畅且安全的应用体验.WinRT会 ...

  9. eclipse插件svn和客户端工具TortoiseSvn的版本对应关系

    如果同时使用这两个软件,一定要保证版本的对应关系: 插件svn1.4.x对应TortoiseSvn 1.5.x 插件svn1.6.x对应TortoiseSvn 1.6.x 插件svn1.8.x对应To ...

  10. 一个.java源文件中可以有多个类吗?(内部类除外)有什么条件?

    一个.java源文件中可以有多个类吗?(内部类除外)有什么条件?带着这个疑惑,动手建几个测试类, 揭开心中的疑惑.以下是解开疑惑过程: package test;/** * 一个.java源文件中可以 ...