C#(2)-OOP(上)访问控制、属性和索引器

一.访问控制

定义类时,若没有指定可访问性,默认的可访问性是internal;

在C#中,可以使用访问修饰符public、protected、internal、internal protected或private声明类成员的可访问性。

public:访问不受限制

protected:访问仅限当前类或子类

internal:访问仅限当前程序集

internal protected:访问仅限当前程序集或不属于同一程序集中的子类

private:访问仅限于当前类

 

二.属性和索引器

属性是一种间接访问数据成员的机制,不允许直接操作数据内容,而是通过访问器(属性方法)访问数据成员。给属性赋值使用set访问器(Accessor),set访问器始终用value设置属性值;获取属性值使用get访问器,get访问器通过return返回属性值。在访问声明中,只有get访问器是只读属性,只有set访问器是只写属性,既有get访问器又有set访问器表示读写属性。

如下为把数据成员定义属性

class Circle
{
private double radius;
public Circle() { }
public Circle(double radius)
{
this.radius = radius;
}
public double Radius
{
get { return radius; }
set { radius = value; }
}
public double GetArea()
{
return Math.PI * radius * radius;
}
}

例题:定义一个人的person类

class1.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplicationA
{
class Person{
private string name;
private char sex;
private DateTime birthDate;
public Person() { }
public Person(string name,char sex,DateTime birthDate){
this.name=name;
this.sex=sex;
this.birthDate=birthDate;
}
public string Name{
get{return name;}
set{name=value;}
}
public char Sex{
get{return sex;}
set{sex=value;}
}
public DateTime BirthDate{
get{return birthDate;}
set{birthDate=value;}
}
public void Show(){
Console.WriteLine(“name:{0}”,name);
Console.WriteLine(“sex:{0}”,sex);
Console.WriteLine(“birthDate:{0},birthDate”);
}
}
}

program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplicationA
{
class Program
{
static void Main(string[] args)
{
Person p1 = new Person();
Person p2 = new Person();
p1.Name = “fds”;
p1.Sex = ‘m’;
p1.Show();
p2.Show();
Console.ReadLine();
}
}

}

索引器

索引器允许类或结构的实例按照数组的相同方式进行索引,类似于属性,不同的是索引器包含参数

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
namespace indexer
{
    class DayCollection
    {
        string[] days = { "Sun", "Mon", "Tues", "Wed", "Thurs", "Fri", "Sat" };
        public string this[int index]
        {
            get
            {
                return days[index];
            }
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            DayCollection week = new DayCollection();
            Console.WriteLine(week[1]);
            Console.ReadLine();
        }
    }
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注