• c#学习0216


    2017-03-02

    out  关键字指定所给的参数为一个输出参数 该参数的值将返回给函数调用中使用的变量

    注意事项 1未赋值的变量用作ref参数是非法的,但是可以把未赋值的变量用作out参数

    2 在函数使用out参数时,必须把它看成尚未赋值

    例如:

    static void Main(string[] args)
    {
    //int myNunber = 5;
    //Console.WriteLine("mynumber is {0}",myNunber);
    //DoubleValue(ref myNunber);
    //Console.WriteLine(myNunber);

    int[] myArray = { 1,4,2,5,6,7,8,0,9,3};
    int maxIndex;
    Console.WriteLine(MaxValue(myArray,out maxIndex));
    Console.WriteLine($"{maxIndex+1}");

    Console.ReadKey();
    }

    public static int MaxValue(int[] myArray, out int maxIndex)
    {
    int maxValue = myArray[0];
    maxIndex = 0;
    for (int i = 0; i < myArray.Length; i++)
    {
    if (myArray[i] > maxValue)
    {
    maxValue = myArray[i];
    maxIndex = i;
    }
    }
    return maxValue;
    }

    ref 引用传参 函数处理的变量和函数调用中使用的变量相同,而不仅仅是值相同的变量。对这个变量做的任何的改变都会影响用作参数的变量值 用ref关键字指定参数

    注意 两个限制 1 必须在函数调用中使用"非常量的变量"  2必须使用初始化过的变量   const 定义该变量始终为常量 限制一个变量被改变,只读变量 在定义的时候初始化,之后不能被更改

    例如:

    namespace Ref和Out
    {
    class Program
    {
    static void Main(string[] args)
    {
    int myNunber = 5;
    Console.WriteLine("mynumber is {0}",myNunber); //5
    DoubleValue(ref myNunber);//10
    Console.WriteLine(myNunber);//10
    Console.ReadKey();

    }
    public static void DoubleValue(ref int val)
    {
    val =val* 2;
    Console.WriteLine($"the value is {val}");
    }

    }
    }

     Params

    当需要传递多个参数或者参数的个数不确定的时候,就可以使用params类型的参数。例如

    namespace Params
    {
    class Program
    {
    static void Main(string[] args)
    {
    UserParams(1,2,3);
    UserParamsTwo("1","test",true);
    int[] myArray = { 1, 2, 3, 4, 5 };
    UserParams(myArray);
    Console.ReadKey();

    }

    public static void UserParams(params int[] list)
    {
    for (int i = 0; i < list.Length; i++)
    {
    Console.WriteLine(list[i]);
    }
    Console.WriteLine();
    }
    public static void UserParamsTwo(params object[] list)
    {
    foreach (var i in list)
    {
    Console.WriteLine(i);
    }
    Console.WriteLine();
    }
    }

    }

    1 构造函数

    作用是初始化对象,对对象的属性依次的赋值 没有返回值 没有void 构造函数的名称必须和类名一致 构造函数也可以实现重载  

    创建对象的时候调用构造函数 每个类都会有一个默认的无参数的构造函数 当显示的声明了一个构造函数后,默认的无参数的构造函数就被干掉了

    2 重载

    函数名称相同,参数的个数或者类型不同

    3 this

    1代表当前类的对象 2 显示的调用当前类的构造函数

    4 构造函数调用构造函数

    public Student(string name,int age,char gender,int chinese,int math,int english)
    {
    this.Name = name;
    this.Age = age;
    this.Gender = gender;
    this.Chinese = chinese;
    this.Math = math;
    this.English = english;
    }

    :this

    public Student(string name, int age, char gender):this(name,age,gender,0,0,0)
    {
    //this.Name = name;
    //this.Age = age;
    //this.Gender = gender;
    }

    5 属性 property  字段 fileds  方法 method

    作用是保护字段 对字段的取值和赋值做限制 其本质就是一个get方法 一个set方法

     6 析构函数

    程序执行结束的时候 执行析构函数 现在c#中有一个GC垃圾回收机制

    7 继承  基类/父类 派生类/子类

    子类隐式的获得父类的除构造函数和析构函数以为的所有成员 ???

    子类只能有一个直接父类 所以c#不能实现多重继承  而父类可以有多个直接子类 所以继承是可以传递的;

    如果class b 派生出 class c ; class a 派生出 class b 那么 class c会继承 class a 和class b的声明的成员;

    可以实现某个类禁止被其他类继承吗?  c#提供了一个 sealed修饰符  会阻止其他类继承改基类

    //父类 person

    public class person

    {

     //字段

    private string _name;

    private int _age;

    private char _gender;

    //属性

    public string Name {get;set;}

    public int Age {get;set;}

    pubic char Gender {get;set;}

    //构造函数

    public person(string name,int age,char gender)

    {

      this.Name=name;this.Age=age;this.Gender=gender;

    }

    //自定义函数

    public void SayHello()

    {

      console.writeline("我是{0},我今年{1}岁了,我是{2}生",this.Name,this.Age,this.Gender);

    }

    }

    //第一个子类 reporter 记者类  继承父类 person

    public class repoter:person

    {

    //字段

    private string _hobby;

    //属性

    public string Hobby{get;set;}

    //构造函数 继承父类的

    public reporter(string name,int age,char gender,string hobby):base(name,age,gender)

    {

      this.Hobby=hobby;

    }

    //自定义函数

    public void reporterSayHello()

    {

      console.writeline("我是{0},我今年{1}岁了,我是{2}生,我的爱好是{3}",this.Name,this.Age,this.Gender,this.Hobby);

    }

    }

    //第二个子类 programmer 继承父类person

    public class programmer:person

    {

    //字段

    private int _iWorkYear;

    //属性

    public int iWrokYear{get;set;}

    //构造函数 继承父类

    pulic programmer(string name,int age,char gender,int iWorkYear):base(name,age,gender)

    {

      this.iWrokYear=iWorkYear;

    }

    //自定义函数 

    public void programmerSayHello()

    {

      console.writeline("我是{0},我今年{1}岁了,我是{2}生,我的工作年限是{3}",this.Name,this.Age,this.Gneder,this.iWorkYear);

    }

    }

  • 相关阅读:
    Oracle報錯︰ORA-12638 證明資料擷取失敗
    tomcat启动startup.bat一闪而过[转]
    供应商术语
    如何在本地设置www.xxx.com,使其允许访问
    windows 安装包位置
    Windows Mobile系列学习四:Windows Mobile如何进行打包、设置打包显示图标
    Windows Mobile系列学习二:Windows Mobile 模拟器如何设置网络连线
    Windows Mobile的程式安装的手持机上如何设置开机自动启动功能?
    Java篇:树和Map
    JAVA篇:Java 多线程 (八)多线程下其他组件
  • 原文地址:https://www.cnblogs.com/yachao1120/p/6407837.html
Copyright © 2020-2023  润新知