C# 方法和参数

/*方法和参数
 * 1.c#的方法必须在某个类型当中
 * 重要:一个类中的所有方法的签名必须具有唯一性:方法名,参数的数据类型,参数的数量这三个标准来定义唯一性;不包括返回类型;不包括参数的名称
 * 2.可选参数的意思就是在声明方法的时候将常量值赋给参数,以后调用方法时就不必每个参数都指定;
 * 重要:所有的可选参数必须放在必须参数(无默认值)的后面,默认值必须是常量
 * Date: 2015/2/5
 * Time: 14:33
 * 规范:
 * 1.开发者应侧重于可读性,而不是在写出更简短的代码方面耗费心机,为了使代码一目了然,进而在长时间里更容易维护,可读性是关键;
 * 2.方法名称最好是动词和动词短语诗人一目了然就能明白这个方法是干什么的;
 *
 */
using System;

namespace LearningFunctionAndArgument
{
    class Program
    {
        public string Name{get;set;}
        public static void Main(string[] args)
        {
            // TODO: Implement Functionality Here
//            (new Program()).SayHello("XiaoHong",23);
//            Program p=(new Program()).Test();
//            p.Name="yu";
//            string result;
//            Console.WriteLine(Program.ConditionBreak("quit",out result));
//            Console.WriteLine(result);
//            TestParameter(new Peraon(){Height=180,Lover="YY"});
            Peraon person=new Peraon(){Height=180,Lover="YY"};
            string strArgument="oldStr";
            TestParameter(person,ref strArgument);
            System.Console.WriteLine(person.Height+"   "+person.Lover+"   "+strArgument);
//            Combine();//可以指定包含的0个实参
//            Combine(13);//错误,证明参数数组是类型安全的,必须于形参兼容,所以会报错
            Console.WriteLine(new Program().Talk(24,"wang"));
            new Program().SayHello(name:"xiaoxiao",age:18);
//            new Program().SayHello(name:"xiaoxiao",18);//错误:如果有参数显示的命名参数的话,那么所有的参数都必须显示命名参数规范
            new Program().Talk(lover:"you");//命名参数

            Console.ReadKey(true);
        }
        public     void SayHello(string name,int age)
        {
//            string name=null;//报错,原因是出现了两个同名的局部变量
            Console.WriteLine("My name is {0},my age is {1}",name,age);
        }
        Program Test()
        {
            return new Program();
        }

        public static bool ConditionBreak(string command,out string result)
        {
            switch(command)
            {
                case "quit":
                    result="jieguo";
                    return false;
                    default :
                        result="jieguo";
                    return true;
            }
        }
        public static void TestParameter(Peraon person,ref string strArgument)
        {
            person.Height=178;
            person.Lover="MM";
            strArgument ="newStr";
            Console.WriteLine(person.Height+"   "+person.Lover+"  "+strArgument);
        }
        /*参数数组:参数数组不一定是方法的唯一参数,但必须是方法声明的最后一个参数,由于只有最后一个参数才能使参数数组,所以一个方法只能有一个参数数组*/
        public static string Combine(params string[] paths)
        {
            string result=string.Empty;
            foreach(string path in paths)
            {
                result=System.IO.Path.Combine(result,path);
            }
            return result;
        }
//        public static int Combine(params string[] Paths)//只是返回类型,参数的名称不一样,会报错,会认为是同一个方法签名
//        {
//
//            return 24;
//        }
        public static string Combine(params int[] paths)//正确,因为参数的类型不一样
        {
            return "Erro";
        }
        public int Combine(string name,params string[] paths)//正确,因为参数的个数不一样
        {
            return 90;
        }
        public int Combine(int age,int height)//正确,因为参数的个数,
        {
            return 56;
        }
//        public static int Combine(int height,int age)//错误
//        {
//            return 34;
//        }
        public int Combine(int age,int height,string name)//正确,参数的个数不一样
        {
            return 67;
        }
        public int NewCombine(int age,int height,string name)//正确
        {
            return 67;
        }
        /*可选参数*/
        public string Talk(int height,string name="XiaoSan")
        {
            return string.Format(name+"{0}",height);
        }
        public void Talk(int height=13,string name="donggua",string lover="me")
        {
            Console.WriteLine("height={0},name={1},lover={2}",height,name,lover);
        }
    }
    class Peraon
    {
        public string Lover{get;set;}
        public int Height{get;set;}
    }

}
时间: 2024-10-25 21:07:02

C# 方法和参数的相关文章

main方法的参数

敲例子的时候无意中把主方法的参数给落下了,当时没有发现,保存之后就去编译,运行了,通常情况下编译没有错误那胜利就在掌握之中了,没想到这次我竟然在"不一般"的行列中,编译无误,运行出错,错误信息如下: "找不到主方法?记得我写了main()方法了啊?回到代码处看了一下,也是static的啊?没问题啊,算了把错误信息拿出来与代码对照着看吧,发现唯一不一样的地方就是我的方法中没有参数, 立刻将参数添进去,编译,果然能运行了,回头想想,我也没传参啊,为什么还非得把它添进去啊?平时自己

C#中方法的参数的四种类型

C#中方法的参数有四种类型: 1. 值参数类型  (不加任何修饰符,是默认的类型) 2. 引用型参数  (以ref 修饰符声明) 3. 输出型参数  (以out 修饰符声明) 4. 数组型参数  (以params 修饰符声明) =================================================== 1. 值传递: 值类型是方法默认的参数类型,采用的是值拷贝的方式.也就是说,如果使用的是值类型,则可以在方法中更改该值,但当控制传递回调用过程时,不会保留更改的值.使用

详解SpringMVC中Controller的方法中参数的工作原理

前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:http://www.cnblogs.com/fangjian0423/p/springMVC-introduction.html SpringMVC中Controller的方法参数可以是Integer,Double,自定义对象,ServletRequest,ServletResponse,ModelAndView等等,非常灵活.本文将分析SpringMVC是如何对这些参数进行处理的,

Spring中的AOP(五)——在Advice方法中获取目标方法的参数

摘要: 本文介绍使用Spring AOP编程中,在增强处理方法中获取目标方法的参数,定义切点表达式时使用args来快速获取目标方法的参数. 获取目标方法的信息 访问目标方法最简单的做法是定义增强处理方法时,将第一个参数定义为JoinPoint类型,当该增强处理方法被调用时,该JoinPoint参数就代表了织入增强处理的连接点.JoinPoint里包含了如下几个常用的方法: Object[] getArgs:返回目标方法的参数 Signature getSignature:返回目标方法的签名 Ob

详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析] good

目录 前言 现象 源码分析 HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口介绍 HandlerMethodArgumentResolver与HandlerMethodReturnValueHandler接口的具体应用 常用HandlerMethodArgumentResolver介绍 常用HandlerMethodReturnValueHandler介绍 本文开头现象解释以及解决方案 编写自定义的HandlerMet

Effective Java - 方法的参数声明

给方法的参数加上限制是很常见的,比如参数代表索引时不能为负数.对于某个关键对象引用不能为null,否则会进行一些处理,比如抛出相应的异常信息. 对于这些参数限制,方法的提供者必须在文档中注明,并且在方法开头时检查参数,并在失败时提供明确的信息,即: detect errors as soon as possible after they occur 这将成为准确定位错误的一大保障. 如果没有做到这一点,最好的情况是方法在处理过程中失败并抛出了莫名其妙的异常,错误的源头变得难以定位,但这是最好的情

Effective Item 17 - 关于方法的参数声明

给方法的参数加上限制是很常见的,比如参数代表索引时不能为负数.对于某个关键对象引用不能为null,否则会进行一些处理,比如抛出相应的异常信息. 对于这些参数限制,方法的提供者必须在文档中注明,并且在方法开头时检查参数,并在失败时提供明确的信息,即detect errors as soon as possible after they occur,这将成为准确定位错误的一大保障. 如果没有做到这一点,最好的情况是方法在处理过程中失败并抛出了莫名其妙的异常,错误的源头变得难以定位,但这是最好的情况.

c# 方法传递参数

一.参数的使用方法: 1.值参数(Value Parameter ) 格式:方法名称(参数类型 参数名称[,参数类型 参数名称]) 2.引用参数(Reference Parameter ) 格式:方法名称(ref 参数类型 参数名称[,ref 参数类型 参数名称]) 3.输出参数(Out Parameter) 格式:方法名称(out 参数类型 参数名称[,out 参数类型 参数名称]) 二.值参数与引用参数及输出参数的区别: 2.1 值参数中实参的值不随形参值变更而变更: 形参与实参值互不影响,

C#中方法的参数修饰符

做项目久了,有的时候真的需要静下心来认真的总结一下自己所用到的技术,而不是每天依葫芦画瓢,每天忙忙碌碌,到头来不知道自己忙了个啥,学了什么,自己到底掌握了多少知识.所以我想回顾一下C#的基础知识,把重要的知识总结成点记录下来,方便以后快速阅读. 方法的参数及参数修饰符: 1.(无).如果一个参数没有用参数修饰符标记,则认为它将按值进行传递,这将意味着被调用的方法收到原始数据的一份副本. 2. out:输出参数由被调用的方法赋值,因此按引用传递,如果被调用的方法没有给输出参数赋值,就会出现编译错误

CLR via C#深解笔记四 - 方法、参数、属性

实例构造器和类(引用类型) 构造器(constructor)是允许将类型的实例初始化为良好状态的一种特殊方法.构造器方法在“方法定义元数据表”中始终叫.ctor. 创建一个引用类型的实例时: #1, 首先为实例的数据字段分配内存 #2, 然后初始化对象的附加字段(类型对象指针和同步块索引) #3, 最后调用类型的实例构造器来设置对象的初始状态 构造引用类型的对象时,在调用类型的实例构造器之前,为对象分配的内存总是先被归零.构造器没有显示重写的所有字段保证都有一个0或null值.和其它方法不同,实