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

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


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

  

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);


posted @ 2024-01-30 09:59  HY10-SALTEST-FISH  阅读(4)  评论(0编辑  收藏  举报