** 属性和方法**
属性和方法
概述
属性和方法是C#程序中两个重要的组成部分,其中,属性提供灵活的机制来读取,编写和计算私有字段的值,而方法则以一部分代码构成代码块的形式存在,用来实现特定的功能。
1.1属性
1.1.1属性概述
对于属性的理解其实并不难,相信我们都玩过游戏,其实游戏中也能找到属性,比如人物属性,常见的有攻击,防御,速度,HP,EXE等;
属性以两种形式存在:一种是在公共语言运行库的基类库中定义的属性;另一种是自己创建,可以向代码中添加附加信息的自定义属性。
自定义属性在类中是通过以下方式声明的:指定属性的访问级别,后面是属性的类型,接下来是属性的名称,然后是声明get访问器和set访问器的代码模块,器语法格式如下
下面展示一些 `内联代码片`。
访问修饰符 数据类型 属性名
{
get
{
return 变量名;
}
set
{
变量名 = value;
}
}
常见的访问修饰符
public 不限制对该属性的访问;
private 私有访问修饰符,只能在声明的类中访问;
//下面两个孩子还不太会
protected 只能从器所在的类和所在类的子类进行访问
internal 只有其所在类才能访问
例题
下面代码自定义了一个Date类,该类有一个属性day,因为该属性提供了get和set访问器,因此它是可读可写属性,代码如下;
// An highlighted block
1.1.2属性的使用
程序中调用属性的语法格式如下
对象名.属性名
例题
using System;
namespace Pizrim
{
class MyClass
{
private string id = "";
private string name = "";
public string ID
{
get
{
return id;
}
set
{
id = value;
}
}
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
}
class Program
{
static void Main()
{
MyClass myClass = new MyClass();
myClass.ID = "110";
myClass.Name = "警察叔叔";
Console.WriteLine(myClass.ID + "is" + myClass.Name);
}
}
}
为啥要用get 和set,直接写成public不香吗??
这个问题起初也特别困惑我
后来查了一些资料后
我这样解释一下
如果说只有一个赋值语句,那这两个其实本质上是没有什么区别。
但是!!
就按上面那个myClass.Name来说,如果日后我真的想做一个这样的项目来查找id里对应的人
如果单纯的将这个字段设置成public,我们在输入id时,我们可能就会去输入不在数据库里面的东西,用了set之后,就可以对id进行一些设置
例如,设置id在0-10,那使用getset之后就可以避免输入11了
这是一个初学者对这个问题的一个理解。
2.1方法
方法是一种用于实现可以由对象或类执行的计算或操作的成员。类的方法主要是和类相关联的动作,她是累的外面界面。对于那些私有的字段来说,外部界面实现对他们的操作一般只能通过方法来实现。
2.1.1方法的声明
方法在类或结构中声明,声明时需要访问级别,返回值,方法参数及方法名称。
例题
声明一个public类型的无返回值的方法method()
public void method()
{
Console.Write("方法声明");
}
2.2.2方法的参数类型
params参数
params参数用来指定在参数树木可变时采用的方法参数,params参数必须是一维数组
static void UseParams(params string[]list)
{
for(int i=0;i<list.Length;i++)
{
Console.WriteLine(list[i]);
}
}
static void Main()
{
string[] strName=new string[5]={"我","是","中","国","人"};
UsepParams(strName);
Console.Read();
}
ref参数
ref 关键字使参数按引用传递。其效果是,当控制权传递回调用方法时,在方法中对参数所做的任何更改都将反映在该变量中。若要使用 ref 参数,则方法声明和调用方法都必须显式使用 ref 关键字。
public static void Method(ref int i)
{
i=44;
}
public static void Main()
{
int val =0;
Method (ref val);
Console.WriteLine(val);
Console.Read();
}
out参数
out 关键字会导致参数通过引用来传递。这与 ref 关键字类似,不同之处在于 ref 要求变量必须在传递之前进行初始化。若要使用 out 参数,方法定义和调用方法都必须显式使用 out 关键字。
public static void Method(out int i)
{
i=44;
}
public static void Main()
{
int value;
Method (out valer);
Console.WriteLine(val);
Console.Read();
}
ref和out区别
1、ref指定的参数在函数调用时候必须初始化,不能为空的引用。而out指定的参数在函数调用时候可以不初始化;
2、out指定的参数在进入函数时会清空自己,必须在函数内部赋初值。而ref指定的参数不需要。
大概就是这个样子
这里是引用 https://www.cnblogs.com/qiuluo/p/13671529.html
2.2.3方法的分类
静态方法
静态方法不对特定实例进行操作,调用时,需要直接使用类名进行调用
例题
静态方法Add() 两个参数,功能两个整数相加
public static int Add(int x,int y)
{
return x+y;
}
static void Main()
{
Console.WriteLine("结果为: "+Program.Add(3,5));//使用类名调用静态方法
}
非静态方法
非静态方法是对类的某个给定的实例进行操作,调用时,需要使用类的实例进行调用
例题
要求基本同上静态改为非静态
public int Add(int x,int y)
{
return x+y;
}
static void Main()
{
Program program = new Program();//实例化类对象
Console.WriteLine("结果为: "+Program.Add(3,5));//使用类对象调用定义的非静态方法
}
2.2.4 方法的重载
我感觉就跟c语言中的多个函数调用差不多
2.2.5Main()方法
Main()方法是程序的入口点
默认的Main()方法代码如下
static void Main(string[] args){}
注意
1 注意是Main,不是main
如果敲成了main
会出现以下报错
错误 CS5001 程序不包含适合于入口点的静态 “Main” 方法
2 Main必须是静态方法
否则会出现同1一样的报错
3 参数可以作为从零开始索引的命令行参数来读取