zoukankan      html  css  js  c++  java
  • 浅谈类

      类和结构都是创建对象的模版,类定义了类的每个对象可以包含什么数据功能。

      结构和类的区别在于他们在内存中的存储方式,访问方式。类是存储在堆上的引用类型,而结构是存储在栈上的值类型,当然结构也不能继承。在语法上他两个很相似。

      参数可以通过引用或值传递给方法。在变量通过引用传递给方法时,被调用的方法得到的就是这个变量,所以方法内部对变量进行的任何改变在方法退出后仍旧有效。但是如果变量通过直传递给方法的时候,被调用的方法得到的就是这个变量的副本,所以方法内部对变量进行的任何改变在方法退出后就没有效了。需要注意的是在C#里面所有参数在默认的情况下都是通过值来传递的。可能你会说如果是引用类型的变量那也是通过值来传递的吗。答案当然是否定的。我们都知道引用类型的变量只包含对象的引用,将要复制的正好是这个引用,不是对象本身,所以对对象的修改会保存。但是我们想将值参数通过引用传递给方法怎么办。当然有办法 这时我们就可以用ref 关键字。我们需要注意的是无论是按值传递还是引用传递,任何变量都必须初始化。但是你要是不想初始化改怎么办。我们可以让别人代替我们初始化。这时就用out关键字。我们都知道,参数一般需要按顺序传递给方法,要是顺序错了他就会报错。但是如果你不想这样做呢,怎么办。我们就可以搞一个命名参数,就是在调用方法的时候在方法的括号里面写上参数的名称然后在:以后写参数即可,这样我们就搞定了。我们都知道重载这个概念,就是同一个方法名,参数类型或个数不同。那除了重载还有没有其他办法实现相同的效果呢。答案是肯定的,我们可以用可选参数。但是我们必须为可选的参数提供一个默认值,而且这个可选参数必须定义的是最后一个参数。显然不如重载好用。

      属性在客户端代码看来就是一个字段。属性是可以有访问修饰符的。但get访问器是公有的,set可以私有和受保护。

      构造函数的重载遵循与其他方法相同的规则。如果构造函数带了参数编译器就不会提供默认的构造函数。除非你没有定义。静态构造函数没有访问修饰符。静态构造函数不能带参数,一个类里面只能有一个静态构造函数。无参的构造函数和静态构造函数可以在同一个类中同时定义。

    namespace canshudechuandi
    {
        class Program
        {
            //static void SomeFunction(int[] ints,int i)
            //{
            //    ints[0] = 100;
            //    i = 100;
            //}
            //static void SomeFunction(int[] ints, ref int i)
            //{
            //    ints[0] = 100;
            //    i = 100;
            //}
            static void SomeFunction(out int i)
           {
            
               i = 100;
            }
            static void Main(string[] args)
            {
                //int i = 0;
                //int[] ints ={ 0, 1, 2, 4, 8 };
                //Console.WriteLine("i=" + i);
                //Console.WriteLine("ints[0]=" + ints[0]);
                //Console.WriteLine("没有调用SomeFunction方法之前");

                //SomeFunction(ints, ref i);
                //Console.WriteLine("i=" + i);
                //Console.WriteLine("ints[0]=" + ints[0]);
                //Console.WriteLine("没有调用SomeFunction方法之后");
                //Console.ReadKey();
                int i;
                SomeFunction(out i);
                Console.WriteLine(i);
                Console.ReadKey();

            }
        }
    }

  • 相关阅读:
    python flask api
    理解傅里叶变换
    数学建模笔记
    (java)Ansj分词器,Stanford分词器,Jieba分词器,NLPIR汉语分词系统
    《数学之美》读书笔记
    浅谈对机器学习方法(决策树,SVM,knn最近邻,随机森林,朴素贝叶斯、逻辑回归)的理解以及用sklearn工具实现文本分类和回归方法
    《大话数据挖掘》学习笔记——案例教学法
    py调用另一个py
    ros树梅派4bmpu6050
    cleaningrobot_planing
  • 原文地址:https://www.cnblogs.com/lijin/p/2680916.html
Copyright © 2011-2022 走看看