zoukankan      html  css  js  c++  java
  • (原创)c#学习笔记10--定义类成员05--部分方法定义

    10.5  部分方法定义

      部分类也可以定义部分方法。部分方法在部分类中定义,但没有方法体,在另一个部分类中包含实现代码。在这两个部分类中,都要使用partial关键字

    public partial class MyClass {
        partial void MyPartialMethod();
    }
    
    public partial class MyClass {
        partial void MyPartialMethod() {
            // Method implementation
        }
    }

      部分方法也可以是静态的,但它们总是私有的,且不能有返回值。它们使用的任何参数都不能是out参数, 但可以是ref参数。 部分方法也不能使用virtual、 abstract、 override、 new、 sealed和extern修饰符

      有了这些限制,就不太容易看出部分方法的作用了。实际上,部分方法在编译代码时非常重要,其用法倒并不重要。考虑下面的代码:

    public partial class MyClass {
        partial void DoSomethingElse();
        
        public void DoSomething() {
            Console.WriteLine(  "DoSomething() execution started." );
            DoSomethingElse();
            Console.WriteLine( "DoSomething() execution finished." );
        }
    }
    
    public partial class MyClass {
        partial void DoSomethingElse() {
            Console.WriteLine( "DoSomethingElse() called." );
        }
    }

      在第一个部分类定义中定义和调用部分方法 DoSomethingElse,在第二个部分类中实现它。在控制台应用程序中调用DoSomething时,输出如下内容:

          DoSomething() execution started. 
          DoSomethingElse() called. 
          DoSomething() execution finished. 

      如果删除第二个部分类定义,或者删除部分方法的全部执行代码(注释掉代码),输出就如下所示:

          DoSomething() execution started. 
          DoSomething() execution finished. 

      读者可能认为,调用 DoSomethingElse 时,运行库发现该方法没有实现代码,因此会继续执行下一行代码。但实际上,编译代码时,如果代码包含一个没有实现代码的部份方法,编译器会完全删除该方法,还会删除对该方法的所有调用。执行代码时,不会检查实现代码,因为没有检查方法的调用。这会略微提高性能。

      与部分类一样,在定制自动生成的代码或设计器创建的代码时,部分方法是很有用的。设计器会声明部分方法,用户根据具体情形选择是否实现它。如果不实现它,就不会影响性能,因为该方法在编译过的代码中不存在。

      现在考虑为什么部分方法不能有返回类型。如果可以回答这个问题,就可以确保完全理解了这个主题,我们将此留作练习。

  • 相关阅读:
    hdu 4002 Find the maximum
    hdu 2837 坑题。
    hdu 3123
    zoj Treasure Hunt IV
    hdu 2053 Switch Game 水题一枚,鉴定完毕
    poj 1430 Binary Stirling Numbers
    hdu 3037 Saving Beans
    hdu 3944 dp?
    南阳oj 求N!的二进制表示最低位的1的位置(从右向左数)。
    fzu 2171 防守阵地 II
  • 原文地址:https://www.cnblogs.com/wodehao0808/p/4969203.html
Copyright © 2011-2022 走看看