C#入门讲解(二)
2014-02-21 14:19
176 查看
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Day02
{
class Program
{
static void Main(string[] args)
{
Student st = new Student();
st.StudentId = Convert.ToInt32(Console.ReadLine());
int id = 30;
int id2 = 40;
Console.WriteLine(st.StudentId);
st.Study(ref id ,out id2);
Console.WriteLine("id:"+id+"\nid2:"+id2); //来验证ref 和 out都是值传递 ref和out见下详解
}
}
class Student
{
private int studentId;
public int StudentId
{
get { return studentId; }
set
{
if (value > 0)
{
studentId = value;
}
}
}
public void Study(ref int id,out int id1) //public 为访问修饰符,void 为返回类型,Study 为方法名 ,id为参数
{
id1 = 2; //使用ref关键字注重修改,有进有出,即id值有初始值;而用out关键字 注重修改
即,有出无进即id1无初始值需要对id附上初始值
Console.WriteLine(id);
Console.WriteLine(id1);
}
}
}
ref和out关键字详解:
ref侧重修改,out注重输出
方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。 当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一个值。一个方法可以有一个以上的 out 参数。 若要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数。
不必初始化作为 out 参数传递的变量。然而,必须在方法返回之前为 out 参数赋值。
属性不是变量,不能作为 out 参数传递。方法参数上的 ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。 若要使用 ref 参数,必须将参数作为 ref 参数显式传递到方法。ref 参数的值被传递到 ref 参数。传递到 ref 参数的参数必须最先初始化。将此方法与 out 参数相比,后者的参数在传递到 out 参数之前不必显式初始化。属性不是变量,不能作为 ref 参数传递。
自己理解:首先:两者都是按地址传递的,使用后都将改变原来的数值。看上述代码可以很直观的看出。
其次:rel可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为
空,所以你必须初始化一次。这个就是两个的区别,或者说就像有的网友说的,rel是有进有出,out是只出不进。
静态方法和静态变量:
静态方法与静态变量一样,属于类本身,而不属于那个类的一个对象。调用一个被定义为static的方法,可以通过在它前面加上这个类的名
称,也可以像调用非静态方法一样通过类对象调用。
实例方法必须通过类的实例来使用。实例方法可以使用类的非静态成员,也可以使用类的静态成员。
类的静态方法,静态变量是在类装载的时候装载的。但是要特别注意,类的静态变量是该类的对象所共有的,即是所有对象共享变量。所以
建议尽量少用静态变量。尽量在静态方法中使用内部变量。
方法声明
其中static关键字即表示静态的。声明静态方法的语法如下:
<访问修饰符>static返回类型 方法名(参数列表)
{//方法体}
方法调用
静态方法与实例方法唯一不同的,就是静态方法在返回类型前加static关键字。静态方法的调用有两种途径:
(1)通过类的实例对象去调用
调用格式为: 对象名.方法名
(2) 通过类名直接调用
调用格式为: 类名::方法名
方法规则
我们在使用时要注意:
静态方法只能访问类的静态成员,不能访问类的非静态成员;
非静态方法可以访问类的静态成员,也可以访问类的非静态成员;
静态方法既可以用实例来调用,也可以用类名来调用。
方法重载注意事项:
(1)方法名一定要相同。
(2)方法的参数表必须不同,包括参数的类型或个数,以此区分不同的方法体。
(a)如果参数个数不同,就不管它的参数类型了!
(b)如果参数个数相同,那么参数的类型或者参数的顺序必须不同。
(3)方法的返回类型、修饰符可以相同,也可不同。
方法重载简单实例:
public int add(int a,int b){
return a+b;
}
public double add (double a,double b){
return a+b:
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace day2
{
class Program
{
static void Main(string[] args)
{
Student st = new Student(1);
Console.WriteLine(st.Id);
}
}
class Student
{
private int id;
public int Id
{
get { return id; }
set { id = value; }
}
public Student(int cid) /*构造函数,如果不写此方法,会使用默认构造函数。构造函数的函数名必须与类名一致*/
{
this.id = cid;
}
}
}
构造函数 :
是一种特殊的方法 主要用来在创建对象时初始化对象 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 特别的一个类可以有多个构造函数 可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Day02
{
class Program
{
static void Main(string[] args)
{
Student st = new Student();
st.StudentId = Convert.ToInt32(Console.ReadLine());
int id = 30;
int id2 = 40;
Console.WriteLine(st.StudentId);
st.Study(ref id ,out id2);
Console.WriteLine("id:"+id+"\nid2:"+id2); //来验证ref 和 out都是值传递 ref和out见下详解
}
}
class Student
{
private int studentId;
public int StudentId
{
get { return studentId; }
set
{
if (value > 0)
{
studentId = value;
}
}
}
public void Study(ref int id,out int id1) //public 为访问修饰符,void 为返回类型,Study 为方法名 ,id为参数
{
id1 = 2; //使用ref关键字注重修改,有进有出,即id值有初始值;而用out关键字 注重修改
即,有出无进即id1无初始值需要对id附上初始值
Console.WriteLine(id);
Console.WriteLine(id1);
}
}
}
ref和out关键字详解:
ref侧重修改,out注重输出
方法参数上的 out 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。 当希望方法返回多个值时,声明 out 方法非常有用。使用 out 参数的方法仍然可以返回一个值。一个方法可以有一个以上的 out 参数。 若要使用 out 参数,必须将参数作为 out 参数显式传递到方法。out 参数的值不会传递到 out 参数。
不必初始化作为 out 参数传递的变量。然而,必须在方法返回之前为 out 参数赋值。
属性不是变量,不能作为 out 参数传递。方法参数上的 ref 方法参数关键字使方法引用传递到方法的同一个变量。当控制传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。 若要使用 ref 参数,必须将参数作为 ref 参数显式传递到方法。ref 参数的值被传递到 ref 参数。传递到 ref 参数的参数必须最先初始化。将此方法与 out 参数相比,后者的参数在传递到 out 参数之前不必显式初始化。属性不是变量,不能作为 ref 参数传递。
自己理解:首先:两者都是按地址传递的,使用后都将改变原来的数值。看上述代码可以很直观的看出。
其次:rel可以把参数的数值传递进函数,但是out是要把参数清空,就是说你无法把一个数值从out传递进去的,out进去后,参数的数值为
空,所以你必须初始化一次。这个就是两个的区别,或者说就像有的网友说的,rel是有进有出,out是只出不进。
静态方法和静态变量:
静态方法与静态变量一样,属于类本身,而不属于那个类的一个对象。调用一个被定义为static的方法,可以通过在它前面加上这个类的名
称,也可以像调用非静态方法一样通过类对象调用。
实例方法必须通过类的实例来使用。实例方法可以使用类的非静态成员,也可以使用类的静态成员。
类的静态方法,静态变量是在类装载的时候装载的。但是要特别注意,类的静态变量是该类的对象所共有的,即是所有对象共享变量。所以
建议尽量少用静态变量。尽量在静态方法中使用内部变量。
方法声明
其中static关键字即表示静态的。声明静态方法的语法如下:
<访问修饰符>static返回类型 方法名(参数列表)
{//方法体}
方法调用
静态方法与实例方法唯一不同的,就是静态方法在返回类型前加static关键字。静态方法的调用有两种途径:
(1)通过类的实例对象去调用
调用格式为: 对象名.方法名
(2) 通过类名直接调用
调用格式为: 类名::方法名
方法规则
我们在使用时要注意:
静态方法只能访问类的静态成员,不能访问类的非静态成员;
非静态方法可以访问类的静态成员,也可以访问类的非静态成员;
静态方法既可以用实例来调用,也可以用类名来调用。
方法重载注意事项:
(1)方法名一定要相同。
(2)方法的参数表必须不同,包括参数的类型或个数,以此区分不同的方法体。
(a)如果参数个数不同,就不管它的参数类型了!
(b)如果参数个数相同,那么参数的类型或者参数的顺序必须不同。
(3)方法的返回类型、修饰符可以相同,也可不同。
方法重载简单实例:
public int add(int a,int b){
return a+b;
}
public double add (double a,double b){
return a+b:
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace day2
{
class Program
{
static void Main(string[] args)
{
Student st = new Student(1);
Console.WriteLine(st.Id);
}
}
class Student
{
private int id;
public int Id
{
get { return id; }
set { id = value; }
}
public Student(int cid) /*构造函数,如果不写此方法,会使用默认构造函数。构造函数的函数名必须与类名一致*/
{
this.id = cid;
}
}
}
构造函数 :
是一种特殊的方法 主要用来在创建对象时初始化对象 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 特别的一个类可以有多个构造函数 可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载
相关文章推荐
- 详细讲解Quartz如何从入门到精通(1)
- Logo 首页 下载App 深度学习从小白到入门 —— 基于keras的深度学习基本概念讲解 96 作者 shikanon 2017.02.18 20:27 字数 2551 阅读
- java回忆录—输入输出流详细讲解(入门经典)
- 【python数据挖掘课程】二十二.Basemap地图包安装入门及基础知识讲解
- zookeeper 入门讲解实例
- Postman安装与入门讲解
- SpringMVC入门实例及详细讲解
- 【JavaWeb Structs2学习】 Struts2 入门小例子以及action路径讲解
- gdb调试讲解,快速入门
- SQLITE入门-逐步讲解SQLITE命令行(四)
- Redis 讲解系列之 NoSql入门和概述(二)
- SQLITE入门-逐步讲解SQLITE命令行(二)
- Cmm从入门到精通的讲解
- 傻子能看懂的并查集入门讲解
- 树链剖分入门讲解
- zookeeper 入门讲解实例 转
- 黑马程序员_动态代理入门讲解
- Spring MVC 入门示例讲解
- L061-老男孩实效教育-数据库入门知识理论讲解-第一部-12节
- Spring MVC 入门示例讲解