c#中的属性:c#属性中的访问器一个get() 一个set()一般情况下两者都是一起包含的,在以前我们是见到过的,属性的访问器就如同字面意思一样是用来帮我们访问属性的,其写法法就是在声明的属性后面加上我们的访问修饰符
public int shuzhi
{
get
{
return shuzhi;
}
set
{
shuzhi = value;
}
}
这样的就是访问修饰符的一个标志的格式,我们属性的使用方法和前面的方法等感觉是差不多的,也是传入对应的数据
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _2022_7_16_sx
{
class Shuxing
{
private int shuzhi = 5;
private string name = "lj";
private string xingb = "nan";
public int Shuzhi
{
get
{
return shuzhi;
}
set
{
shuzhi = value;
}
}
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public string Xingb
{
get
{
return xingb;
}
set
{
xingb = value;
}
}
public override string ToString()
{
return "名字=" + name +"性别=" + xingb + "年龄=" + shuzhi;
}
class Program
{
static void Main(string[] args)
{
Shuxing shuxing = new Shuxing();
shuxing.shuzhi = 20;
shuxing.name = "张三";
shuxing.xingb = "男";
Console.WriteLine("{0}", shuxing);
Console.ReadKey();
}
}
}
}
这就是我们的属性和他的访问器的使用,但是在这里我又一个地方没有理解到根据菜鸟教程里的例子在访问器下面那个重写的方法里面没有讲他的来历,但是作用好像是用来输出我们的这个class里的属性的数的一个条件方法具体的来历和作用如果有大佬看到希望可以解答一下,
在看了网上一些大佬的讲解,明白了属性的一个大体的作用,是为了保护数据的不会被外面所影响访问器里的get和set代表的分别是get是我们要输出出来的,就是我们经过设置好的数据,set是我们的相当于我们的条件当我们传进去的数据满足条件后就传递到get最后由我们输出,
抽象属性其实和我们的抽象类基本上是没有太大的差别,抽象属性也要在派生里实现要在派生里重写来实现
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _2022_7_16_sx
{
abstract class Shuxing
{
private int shuzhi = 5;
private string name = "lj";
private string xingb = "nan";
public abstract int Shuzhi
{
get;
set;
}
public abstract string Name
{
get;
set;
}
public abstract string Xingb
{
get;
set;
}
class Shuxingpais:Shuxing
{
public override int Shuzhi
{ get
{
return shuzhi;
}
set
{
shuzhi = value;
}
}
public override string Name
{
get
{
return name;
}
set
{
name = value;
}
}
public override string Xingb
{
get
{
return xingb;
}
set
{
xingb = value;
}
}
}
public override string ToString()
{
return "名字=" + name + "性别=" + xingb + "年龄=" + shuzhi;
}
class Program
{
static void Main(string[] args)
{
Shuxingpais shuxingpais = new Shuxingpais();
shuxingpais.shuzhi = 50;
shuxingpais.xingb = "男";
shuxingpais.name = "李四";
Console.WriteLine("{0}", shuxingpais);
Console.ReadKey();
}
}
}
}
我们可以看到抽象属性的使用方法和一般的抽象类的使用方法是一样的都需要去重写我们的抽象的属性才可以,而且是必要的
c#的索引器;在写法和形式上和我们的属性功能其实是有几分相同的,我们的属性是返回的一个成员,二我们的索引器返回的是一个数据,我们索引器的定义时不能带名称而且要加上this关键字他像是
using System;
namespace _2022_7_17_syq
{
class Syq
{
private string[] shuzhu = new string[nub];
static public int nub = 10;
public Syq()
{
for (int i = 0; i < nub; i++)
{
shuzhu[i] = "ai l";
}
}
public string this[int nuba]
{
get
{
string tmp;
if(nuba>=0&&nuba<=nub)
{
tmp = shuzhu[nuba];
}
else
{
tmp = "不在范围内";
}
return tmp;
}
set
{
if(nuba>=0&&nuba<=nub)
{
shuzhu[nuba] = value;
}
}
}
}
class Program
{
static void Main(string[] args)
{
Syq syq = new Syq();
syq[0] = "艾伦";
syq[1] = "男";
syq[2] = "20岁";
syq[3] = "进击的巨人";
for (int i = 0; i <Syq.nub; i++)
{
Console.WriteLine(syq[i]);
}
Console.ReadKey();
}
}
}
其实在这里我们就可以看到索引器就是我们可以自己控制数组里的每一个数据是什么,并且拿来使用,我们并不是简单的存了一组数据进去而已而是我们自己来控制这组数据是什么,并且我们的索引器是可以重载的,可以多种的数值类型,
using System;
namespace _2022_7_17_syq
{
class Syq
{
private string[] shuzhu = new string[nub];
static public int nub = 10;
public Syq()
{
for (int i = 0; i < nub; i++)
{
shuzhu[i] = "ai l";
}
}
public string this[int nuba]
{
get
{
string tmp;
if(nuba>=0&&nuba<=nub)
{
tmp = shuzhu[nuba];
}
else
{
tmp = "不在范围内";
}
return tmp;
}
set
{
if(nuba>=0&&nuba<=nub)
{
shuzhu[nuba] = value;
}
}
}
public int this[string mz]
{
get
{
int sz=0;
if(sz>=0&&sz<nub)
{
if (shuzhu[sz] == mz)
{
return sz;
}
else
{
return 0;
}
}
return sz;
}
}
}
class Program
{
static void Main(string[] args)
{
Syq syq = new Syq();
syq[0] = "艾伦";
syq[1] = "男";
syq[2] = "20岁";
syq[3] = "进击的巨人";
for (int i = 0; i <Syq.nub; i++)
{
Console.WriteLine(syq[i]);
}
Console.WriteLine(syq["艾伦"]);
Console.ReadKey();
}
}
}
我们可以看到我们重新写了索引器的返回值的类型得到了不一样的数据,这就是我们的重载,按理说我们可以多重的重载来实现我们不一样的功能