Поиск…


Вступление

Частичные классы предоставляют нам возможность разбивать классы на несколько частей и в несколько исходных файлов. Во время компиляции все части объединяются в один класс. Все части должны содержать ключевое слово partial , должны иметь одинаковую доступность. Все части должны присутствовать в одной и той же сборке, чтобы она включалась во время компиляции.

Синтаксис

  • открытый частичный класс MyPartialClass {}

замечания

  • Частичные классы должны быть определены внутри одной и той же сборки и пространства имен в качестве класса, который они распространяют.

  • Все части класса должны использовать partial ключевое слово.

  • Все части класса должны иметь такую ​​же доступность; public / protected / private т. д.

  • Если какая-либо часть использует ключевое слово abstract , тогда комбинированный тип считается абстрактным.

  • Если какая-либо часть использует sealed ключевое слово, то комбинированный тип считается запечатанным.

  • Если какая-либо часть использует базовый тип, тогда комбинированный тип наследуется от этого типа.

  • Комбинированный тип наследует все интерфейсы, определенные для всех частичных классов.

Частичные классы

Частичные классы предоставляют возможность разбивать объявление класса (обычно в отдельные файлы). Общая проблема, которая может быть решена с помощью частичных классов, позволяет пользователям изменять автоматически сгенерированный код, не опасаясь, что их изменения будут перезаписаны, если код будет регенерирован. Также несколько разработчиков могут работать с одним классом или методами.

using System;

namespace PartialClassAndMethods
{
    public partial class PartialClass
    {
        public void ExampleMethod() {
            Console.WriteLine("Method call from the first declaration.");
        }
    }

    public partial class PartialClass
    {
        public void AnotherExampleMethod()
        {
            Console.WriteLine("Method call from the second declaration.");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            PartialClass partial = new PartialClass();
            partial.ExampleMethod(); // outputs "Method call from the first declaration."
            partial.AnotherExampleMethod(); // outputs "Method call from the second declaration."
        }
    }
}

Частичные методы

Частичный метод состоит из определения в одном объявлении частичного класса (как общий сценарий - в автогенерированном) и реализации в другом объявлении частичного класса.

using System;

namespace PartialClassAndMethods
{
    public partial class PartialClass // Auto-generated
    {
        partial void PartialMethod();
    }

    public partial class PartialClass // Human-written
    {
        public void PartialMethod()
        {
            Console.WriteLine("Partial method called.");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            PartialClass partial = new PartialClass();
            partial.PartialMethod(); // outputs "Partial method called."
        }
    }
}

Частичные классы, наследуемые от базового класса

При наследовании от любого базового класса только один частичный класс должен иметь указанный базовый класс.

// PartialClass1.cs
public partial class PartialClass : BaseClass {}

// PartialClass2.cs
public partial class PartialClass {}

Вы можете указать один и тот же базовый класс в нескольких неполных классах. Он будет помечен как избыточный с помощью некоторых инструментов IDE, но он правильно компилируется.

// PartialClass1.cs
public partial class PartialClass : BaseClass {}

// PartialClass2.cs
public partial class PartialClass : BaseClass {} // base class here is redundant

Вы не можете указать разные базовые классы в нескольких частичных классах, это приведет к ошибке компилятора.

// PartialClass1.cs
public partial class PartialClass : BaseClass {} // compiler error

// PartialClass2.cs
public partial class PartialClass : OtherBaseClass {} // compiler error


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow