首页 > 其他分享 >关于方法

关于方法

时间:2022-12-05 22:22:42浏览次数:41  
标签:DoSth int age myOut 关于 方法 void myMethod

  • C#中局部变量的有效范围中不允许有同名的,{}里面的也不可以

方法传值

对于值类型来说,将变量在v1、v2传入方法,a、b会复制v1、v2的值。此时有4个变量,a、b的任何操作无法影响v1、v2

void DoSth(int a,int b) {
	a++;
	b++;
	Console.WriteLine("方法内部\ta={0},b={1}",a,b);
}
int v1=0,v2=0;
DoSth(v1,v2);
Console.WriteLine("方法外部\ta={0},b={1}",v1,v2);
---out---
方法内部  a=1,b=1
方法外部  a=0,b=0

引用传值

引用传值还是比较简单的,就是传递一个引用,方法内改变会影响方法外

using System;

class Hello
{
    static void Main()
    {
        MyClass myclass=new MyClass();
        Console.WriteLine("前\t"+myclass.age);
        Hello.DoSth(myclass);
        Console.WriteLine("后\t"+myclass.age);
    }
    static void DoSth(MyClass myclass){
        myclass.age=12;
    }
}
class MyClass{
    public int age{get;set;}
} 
---
前      0
后      12

使用ref方式传递参数

仅仅对于值类型有影响,使用ref后,方法内对于值类型的改变,同样会影响到方法外的;
引用类型,天生传递引用,必定会影响

引用类型在方法内重新绑定的影响

myOut.age默认值是0,在方法外使myOut.age为111。进入方法DoSth后,myMethod引用将指向myOut的堆地址,所以此时myMethod.age=myOut.age=111。
但是当myMethod进行重新绑定后,c#会在内存中堆重新生成一个MyClass对象并绑定myMethod,所以此时myMethod.age=0。此时,内存中存在两个MyClass的实例,当方法结束后,myMythod的生命周期结束,内存中仅存在myOut的实例。

注意,如果类似于(ref myMethod),那么,方法内对于myMethod的影响会影响myOut

using System;

class Hello
{
    static void Main()
    {
        MyClass myOut=new MyClass();
        myOut.age=111;;
        Hello.DoSth(myOut);
        Console.WriteLine("方法外面\t"+myOut.age);
    }
    static void DoSth(MyClass myMethod){
        Console.WriteLine($"传入时值\t{myMethod.age}");
        myMethod=new();
        Console.WriteLine($"改变后值\t{myMethod.age}");
    }
}
class MyClass{
    public int age{get;set;}
}
---
传入时值        111
改变后值        0
方法外面        111

方法的重载

方法的重载只和方法的签名有关,在这里就是需要形参有不同(类型、数目、顺序)

//重载失败--和返回类型无关
public void DoSth(int a)
public int  DoSth(int a)
//重载失败--和限定修饰符无关
public void DoSth(int a)
private void  DoSth(int a)    
//重载成功    
public void DoSth(int a)
public void DoSth(int a,int b)
//重载成功 
public void DoSth(int a)
public void DoSth(double a)

标签:DoSth,int,age,myOut,关于,方法,void,myMethod
From: https://www.cnblogs.com/lovecxc/p/16953727.html

相关文章

  • Java基础-6(方法)
    Java基础-6(方法)方法概述方法的格式带参数方法形成和实参带返回值的方法方法的注意事项方法的通用格式方法的重载方法的值传递机制习题带参......
  • 打印素数 两种不同方法
    1.用数组列出素数表是素数该下标对应的值为1将每个素数的倍数对应的下标值赋为0这样就完成了素数表#include<stdio.h>intmain(){constintmaxNumber=255;......
  • 多卡:关于trainer中线性层无法自动适配的小踩坑
    transformer家的trainer适配了fp16、多卡...等,用起来很方便,但是之前我在实现模型的时候,发现在init里定义的线性层,在多卡上跑了以后,报错device不匹配,研究了许久,发现是traine......
  • Servlet_执行原理和servlet_生命周期方法
    Servlet_执行原理:执行原理:1.当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径2.查找web.xml文件,是否有对应的<url-pattern>标签内......
  • 前端开发:4、JavaScript简介、变量与常量、数据类型及内置方法、运算符、流程控制、循
    前端开发之JavaScript目录前端开发之JavaScript一、JavaScript简介二、JS基础三、变量与常量四、基本数据类型1、数值类型2、字符类型3、布尔类型五、特殊数据类型1、nu......
  • linux批量删除进程的两种方法
    linux批量删除进程的两种方法 介绍两种方法。要kill的进程都有共同的字串。 [plain] kill-9`ps-ef|grepxxx|awk'{print$2}'`   kill-9后面的符号是Tab键上......
  • IDEA给【类】和【方法】设置作者和日期等注释
    https://blog.csdn.net/m0_61933976/article/details/127021176一、在Java类的开头自动注释作者名字和日期等信息这样以后只要我们创建一个类,就会自动显示作者名和日期时......
  • 弹框居中的方法
    http://t.zoukankan.com/1wen-p-4527667.html.tf-center{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);-webkit-tran......
  • 关于RSA数据加密协议在.Net中的应用
    加密协议有哪些加密协议分为对称加密和非对称加密。对称加密就是将信息使用一个密钥进行加密,解密时使用同样的密钥,同样的算法进行解密。非对称加密,又称公开密钥加密,是加......
  • 【转载】详解mysql插入数据后返回自增ID的七种方法_java
    引言mysql和oracle插入的时候有一个很大的区别是:oracle支持序列做id;mysql本身有一个列可以做自增长字段。mysql在插入一条数据后,如何能获得到这个自增id的......