C#(090):定义类成员(属性、方法、索引、运算符、事件)、接口实现


一、类成员的访问级别

  • public:可由任何代码访问。
  • private(默认):只能由类中的代码访问。
  • internal:只能由它所在的项目(程序集)内部代码访问。
  • protected:只能由类和其派生类访问。
  • protected internal:只能由它所在的项目(程序集)或派生类的代码访问。

二、定义字段

$1```

        public static int myInt3;//静态字段,通过类访问。作用:1、记录一实例化对象的个数,2、存储必须在所有实例间共享的值。

        public const float PI = 3.14F;//常量,编译时就固定,一旦发生更改,需要重新编译,必须且只有在声明时初始化。

    }

## 三、定义方法

方法的继承修饰符:
```csharp
$1```
    abstract class A
```csharp
$1```

无论基类是否为虚拟,派生类都可以用new 来隐藏。不覆盖基类方法,不影响基类的方法。可以用base.M()方式访问基类成员。

    
    
    void Main()
```csharp
$1```
    {

        public virtual void M()//虚拟方法,可继承

        {
```csharp
$1```
            get { return intVal; }
```csharp
$1```

```csharp
$1```
            }

        }
```csharp
$1```
        string this[int index] { get; set; } //定义索引器
```csharp
$1```
        {
```csharp
$1```

            }

        }

    

        public string this[int index]

        {

            get { return _x.ToString(); }

            set { _x = int.Parse(value); }

        }

    }

1、显示接口实现,只能通过接口访问:
```csharp
    MyInterface myClass=new MyClass();

    myClass.DoSth();

2、隐式接口实现,既可通过类,也可通过接口访问。

    MyClass myClass=new MyClass();

    myClass.DoSth();

六、定义索引器

索引器indexer是一种特殊类型的属性。添加到类中,以提供类似于数组的访问。

    void Main()

    {

        MyClass myClass = new MyClass();

        myClass[0] = "d";

        Console.Write(myClass[0]);//d

        Console.Write(myClass[2]);//c

    }

    

    public class MyClass

    {

        private string[] arr = { "a", "b", "c" };

        public string this[int index]

        {

            get { return arr[index]; }//只有get,无set的索引为只读索引

            set { arr[index] = value; }

        }

    }

七、运算符重载

    void Main()

    {

        MyClass myClass1 = new MyClass(500);

        MyClass myClass2 = new MyClass(200);

        Console.Write(myClass1 - myClass2);//300

    }

    

    public class MyClass

    {

        decimal weight;

        public MyClass(decimal weight)

        {

            this.weight = weight;

        }

        public static decimal operator -(MyClass a, MyClass b)

        {

            return a.weight - b.weight;

        }

    }

八、定义事件

    void Main()

    {

        MyClass myClass1 = new MyClass();

        myClass1.myEvent += (sender, args) => { Console.Write(sender); };

        myClass1.TriggerEvent();//MyClass

    

    }

    

    public class MyClass

    {

        public event EventHandler myEvent;//定义事件

        public void TriggerEvent()

        {

            EventHandler temp = myEvent;

            if (temp != null)

                temp(this, EventArgs.Empty);//触发事件

        }

    }

相关