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);
}
}
            
 
作者:RichardCui            
 
出处:https://www.cnblogs.com/yachao1120/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。该文章也同时发布在我的独立博客中-RichardCuiBlog。    
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号