What are the benefits to using a partial class as opposed to an abstract one?

后端 未结 8 1701
花落未央
花落未央 2021-01-18 01:19

I have been reading Programming Microsoft® Visual C#® 2008: The Language to get a better understanding of C# and what can be done with it. I came across partial classes whic

8条回答
  •  南方客
    南方客 (楼主)
    2021-01-18 01:41

    It sounds like your question is what the difference is between

    partial class Foo
    {
      PART ONE
    }
    partial class Foo
    {
      PART TWO
    }
    

    and

    astract class FooBase
    {
      PART ONE
    }
    partial class Foo : FooBase
    {
      PART TWO
    }
    

    While they may appear somewhat similar, and in some cases the latter construct could be used in place of the former, there are at least two problems with the latter style:

    -1- The type FooBase would likely have to know the identity of the concrete type which was supposed to derive from it, and always use variables of that type, rather than of type FooBase. That represents an uncomfortably-close coupling between the two types.

    -2- If type Foo is public, type FooBase would have to also be public. Even if all the constructors of FooBase are internal, it would be possible for outside code to define classes which derived from FooBase but not Foo; constructing instances of such classes would be difficult, but not impossible.

    If it were possible for a derived type to expand the visibility of a base type, these issues wouldn't be overly problematical; one would regard FooBase as a "throwaway" identifier which would appear exactly twice: once in its declaration, and once on the declaration line for Foo, and figure that every FooBase would be a Foo in disguise. The fact that FooBase could not use Foo instance members on this without a typecast could be irksome, but could also encourage a good partitioning of code. Since it isn't possible to expand the visibility of a base type, however, the abstract-class design seems icky.

提交回复
热议问题