3.3C#成员之方法(Method)

包含可执行代码的成员统称为类的 函数成员

C# 支持的函数成员:方法、属性、事件、索引器、运算符、构造函数和析构函数。

下面的代码演示了一个名为 List<T> 的泛型类,此类包含了最常见函数成员的示例。

public class List<T> {
    // 常量
    const int defaultCapacity = 4;

    // 字段
    T[] items;
    int count;

    // 构造函数
    public List(int capacity = defaultCapacity) {
        items = new T[capacity];
    }

    // 属性
    public int Count {
        get { return count; }
    }
    public int Capacity {
        get {
            return items.Length;
        }
        set {
            if (value < count) value = count;
            if (value != items.Length) {
                T[] newItems = new T[value];
                Array.Copy(items, 0, newItems, 0, count);
                items = newItems;
            }
        }
    }

    // 索引器
    public T this[int index] {
        get {
            return items[index];
        }
        set {
            items[index] = value;
            OnChanged();
        }
    }

    // 方法
    public void Add(T item) {
        if (count == Capacity) Capacity = count * 2;
        items[count] = item;
        count++;
        OnChanged();
    }
    protected virtual void OnChanged() {
        if (Changed != null) Changed(this, EventArgs.Empty);
    }
    public override bool Equals(object other) {
        return Equals(this, other as List<T>);
    }
    static bool Equals(List<T> a, List<T> b) {
        if (a == null) return b == null;
        if (b == null || a.count != b.count) return false;
        for (int i = 0; i < a.count; i++) {
            if (!object.Equals(a.items[i], b.items[i])) {
                return false;
            }
        }
        return true;
    }

    // 事件
    public event EventHandler Changed;

    // Operators...
    public static bool operator ==(List<T> a, List<T> b) {
        return Equals(a, b);
    }
    public static bool operator !=(List<T> a, List<T> b) {
        return !Equals(a, b);
    }
}

1.方法声明

返回类型 方法名称<类型参数>(可选参数) {
}

方法可以使用 return 语句将控制权返回给调用方。

在返回 void 的方法中,return 语句无法指定表达式。

在返回非 void 的方法中,return 语句必须包含用于计算返回值的表达式。

2.方法的种类

名称修饰符访问
静态方法(static method)用 static 修饰类.静态方法
实例方法(instance method)无 static 修饰对象.实例方法

3.参数传递方式

//按命名传递
方法(参数名称1: 实参1, 参数名称2: 实参2)
  • 参数的传递不仅支持按位置从左往右依次传递方式,同时也支持按命名传递方式。
  • 方法调用时传递的参数个数与方法定义时接收的参数个数必须相同。
  • 方法调用时传递的参数数据类型与方法定义时参数的数据类型必须相同。

4.虚方法、重写方法和抽象方法

方法修饰符声明和实现
虚方法virtual在基类中声明和实现的方法,其中 任何派生类 都可提供更具体的实现。
抽象方法abstract在基类中声明的方法,必须在所有非抽象派生类中 重写 实现。可以理解为没有实现代码的虚方法,仅可在抽象类中使用。
重写方法override在派生类中实现的方法,此方法将 重写 具有相同签名的虚方法或抽象方法。

5.重载

在声明方法的类中,方法的 签名 必须是唯一的。 方法签名包含修饰符、方法名称、类型参数数量、参数的数量、类型。 方法签名不包含返回类型。

重载 允许同一类中的多个方法具有相同的名称,只要它们具有唯一的签名。 在编译重载方法的调用时,编译器使用  重载决策 来确定要调用的特定方法。 重载决策会查找与自变量匹配度最高的一种方法。 如果找不到任何最佳匹配项,则会报告错误。 

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/csharp/csbasic/7871.html

发表评论

登录后才能评论