首页 > 编程语言 >C#(10):传值,输出,引用,数组,具名,可选参数,拓展方法

C#(10):传值,输出,引用,数组,具名,可选参数,拓展方法

时间:2024-01-30 10:13:29浏览次数:36  
标签:10 静态方法 C# 静态 实例 static 内存 方法 传值

传值参数:被调用后并不会更改变量值,改变的是方法中传去的变量值副本,仅影响方法中的参数值,不影响变量本身的值


变量以及参数指向的是地址,方法调用后参数中重新指向新对象地址,将原来引用的变量对象地址丢弃,重新创建新对象地址

  

getHashcode方法,获取内存中的对象的hash值,任何类型的变量都有这个方法,因为这个方法是从object中派生出来的


方法中不创建新对象,会更改变量的值:使用中不常见,side-effect副作用,方法主要输出还是靠返回值,一般不会轻易改变变量


ref声明故意使用副作用,改变变量值


 


 


tryparse:解析是否成功

  1. 什么情况下使用静态方法?
    判断这个很简单,就是从内存的优化方面去考虑.因为静态和非静态的不同的地方,就是静态的从程序一启动就会一直占用内存,而非静态的只在使用后(实例化)后才会占用内存.但是每实例化个一个对象时又会另外占用内存. 举个例子,比如说一个数据库的连接字段(STRING).因为要经常使用到它,这时我们可以用STATIC.但是如果这时用非静态的话那就不合算了,因为每次调用到它时,又实例化一次.这样相比来说占用内存就比较大了.不划算.  像一个登录后台的方法,你只在登陆时候调用一次,就没有必要做成静态的了.那样一直驻存在内存中.在大型项目中,你如果都使用静态的那得要多少内存去支撑呀.简单点,就是它经常要被调用时,就用静态的.相反则用非静态的.那也就是说,公共方法就设置为静态的方法。
    静态类中所有变量以及子类都应该是静态,并且无法实例化静态类
    C#关键字static如何使用,在什么情况下使用?_c#中static的作用和用法-CSDN博客

 


class StudentFactory
{
    //静态方法根据输入参数实例化对象,并通过输出参数交还创建好的对象
    public static bool Create(string stuName,int stuAge,out Student result) {
    result = null;
    if(string.IsNullOrEmpty(stuName))
    {       
            return false;
    }
    if (stuAge>80||stuAge<20)
        {
            return false;
        }
    result = new Student()
        {
            Age = stuAge,
            Name = stuName  
        };
        return true;
    
    }
}


在静态方法中,你不能使用this关键字,因为this关键字代表当前类的一个实例,而静态方法不与任何类的实例相关联。你也不能访问类的非静态字段和属性。这是因为非静态字段和属性都是和类的实例相关联的,而静态方法不是。但是,你可以在静态方法中创建和使用其他类的实例。在你提供的代码中,提到的"create a new Student object",这是完全合法的。静态方法可以创建新的对象,并且可以访问那个类的(非静态或静态)方法和属性,只要那个类的实例被传入静态方法中。所以,静态方法不能访问他们所在类的实例状态(非静态字段和属性),但是它们可以创建和操纵其他类的实例。

 


cw有很多重载,会声明一个数组对象,将x,y,z放入该数组对象中去
params只能有一个且必须是最后一个



只是调用方法




     /// <summary>
     /// 可选参数,在声明时具有调用值
     /// </summary>
     /// <param name="name"></param>
     /// <param name="age"></param>
     static void PrintInfoDefault(string name="张三",int age=9)
     {
         Console.WriteLine("Hello {0},you are {1}", name, age);
     }



扩展方法必须在顶级静态类上定义,不能在嵌套类中定义扩展方法。能够为指定数据类型添加拓展方法。

  /// <summary>
  /// 拓展方法
  /// 扩展方法必须在顶级静态类上定义,不能在嵌套类中定义扩展方法。和program类平级,且方法必须是静态,公共的
  /// this必须是形参列表中的第一个
  /// </summary>
  static class DoubleExtension
  {
      public static double Round(this double input, int digits)
      {

          double result = Math.Round(input, digits);
          return result;
      }

  }

linq方法

foreach循环和for循环有什么区别和优缺点呢?下面简单总结一下:

foreach循环                                                  for循环

只能用于遍历;                                           可以用于任何形式的重复行为;

不能更改循环目标;                                     在循环体中,可以进行任何操作;

遍历速度快,执行效率高。                            遍历速度慢,执行效率低 。

 //LinQ
 List<int> list = new List<int>() { 11,12,13,14 };
 //All是一个拓展方法,隶属于Enumerable静态类,等效下面的于AllGreaterThanTen()方法
 bool LinqResult = list.All(x => x > 10);


标签:10,静态方法,C#,静态,实例,static,内存,方法,传值
From: https://www.cnblogs.com/houyuxuan/p/17980056

相关文章

  • C# 角度转化度分秒
    1///<summary>2///角度转化度分秒3///秒取整4///</summary>5///<paramname="angle"></param>6///<returns></returns>7privatestringAngleConver......
  • arcgis server地图服务访问权限设置及arcgis server token获取
    一、地图服务访问权限设置。当我们发布arcgis地图服务后,由于涉密或者其他原因,不想让所有人看到地图服务。这时候我们可以对地图设置权限。怎末设置那?进入你们arcgis管理。地址:http://localhost:6080/arcgis/manager/index.html#新建角色。  新建用户。 新建成功。 ......
  • 繁体字转化为简体字 https://share.weiyun.com/ZsmZl6g5 密码:rc8mva
    12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788......
  • 基于volcano实现节点真实负载感知调度
    本文分享自华为云社区《基于volcano实现节点真实负载感知调度》,作者:可以交个朋友。背景默认调度器调度器视某个节点的空闲可调度资源=节点可分配资源-SUM(节点上已调度Pod们的request),当某个Pod处于pending状态待调度时,默认调度器根据Pod中指定的request值和各个节点的空闲......
  • Easy-Es操作Elasticsearch
    目录1Easy-Es1.1简介1.2MySQL与Easy-Es语法对比1.3集成及配置1.3.1pom.xml1.3.2配置1.4使用1.4.1注解的使用1.4.2EsMapper接口1.4.3简单搜索1.5使用案例1.5.1综合商品搜索1.5.2相关商品推荐1.5.3聚合搜索商品相关信息1Easy-Es使用过SpringData操作ES的小伙伴应......
  • Unity3D DrawCall和openGL、光栅化等有何内在联系详解
    Unity3D是一款跨平台的游戏引擎,广泛应用于游戏开发领域。在Unity3D中,DrawCall是一个重要的概念,它与OpenGL、光栅化等技术有着密切的内在联系。本文将详细解释DrawCall的概念,并给出相关技术的详细解释和代码实现。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础......
  • 在线CAD开发(网页浏览DWG)中用到的数学库
    ​前言在网页版CAD二次开发中,正确的使用数学库是十分重要的,我们通过[快速入门]了解到如果打开图纸后,希望对图形进行各种处理,就需要各种数学计算,而mxcad提供了一些类来参与计算或者表示一些数据结构。               向量McGeVector3d如果不......
  • 轻松打造Windows服务:将.NET Core项目转化为无缝运行的后台服务
     概述:本教程教您如何将.NETCore项目打造成Windows服务,实现无需用户登录的后台运行。通过简单步骤,您可以快速部署并管理服务,确保应用持续高效运行。将.NET项目制作成Windows服务可以让你的应用在后台持续运行,无需用户登录。以下是将.NETCore项目制作成Windows服务的步骤:步......
  • elasticsearch 查询:term&terms
    1.term查询term查询:完全匹配查询,搜索前不会对关键字进行分词。只支持单个feild查询。不设置from,size。默认返回10条#测试--term查询POST/king_test_person/_search{"from":0,#limit?"size":20,#limitx,?"query":{"term":{......
  • elasticsearch 查询:match查询
    1.match查询match查询属于高层查询,会根据查询内容不一样,采用不同的查询方式。查询的内容如果是日期或者数值,会将你基于的字符串查询内容转换为日期或者数值对待;如果查询的内容是一个不能被分词的内容(keyword),match查询不会将指定的关键字分词;如果查询内容是一个可以被分词的......