C#属性和方法

** 属性和方法**

概述

	属性和方法是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 参数可以作为从零开始索引的命令行参数来读取

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值