Страницы

Поиск по вопросам

пятница, 29 ноября 2019 г.

Как создать вложенные partial классы?

#c_sharp #ооп


У меня есть класс Library, в котором есть несколько вложенных классов:

public class Library
{
class Book { /*Some code*/ }
class Author { /*Somecode*/ }
class Series { /*Somecode*/ }
class Topic { /*Somecode*/ }
}


Но очень много кода в одном файле, поэтому я решил вынести классы Book, Author, Series,
Topic в отдельные файлы. Для этого я их сделал partial.

public class Library
    {
    partial class Book { }
    partial class Author { }
    partial class Series { }
    partial class Topic { }
    }

//Books.cs
partial class Book { /*Some code*/ }
...


Но что-то не работает, потому, что части partial класса не видят один одного.
    


Ответы

Ответ 1



Частичный класс может быть вложенным в частичный или не частичный класс. В последнем случае охватывающий класс должен иметь одно определение. Например, using System; class Library { public partial class Book { public string Title { get; set; } } public partial class Book { public string Author { get; set; } } public Book book; } public class Test { public static void Main() { Library lib = new Library { book = new Library.Book { Title = "A good book", Author = "me" } }; Console.WriteLine( "\"{0}\" is written by {1}", lib.book.Title, lib.book.Author ); } } Вывод на консоль "A good book" is written by me Если же вы хотите, чтобы и охватывающий класс был определен в различных частях вместе с частичным вложенным классом, то вы его также должны объявить с модификатором partial. Например, using System; partial class Library { public partial class Book { public string Title { get; set; } } } partial class Library { public partial class Book { public string Author { get; set; } } } partial class Library { public Book book; } public class Test { public static void Main() { Library lib = new Library { book = new Library.Book { Title = "A good book", Author = "me" } }; Console.WriteLine( "\"{0}\" is written by {1}", lib.book.Title, lib.book.Author ); } } Вывод на консоль будет таким же, как показано выше.

Комментариев нет:

Отправить комментарий