Страницы

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

четверг, 4 октября 2018 г.

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

У меня есть класс 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 класса не видят один одного.


Ответ

Частичный класс может быть вложенным в частичный или не частичный класс. В последнем случае охватывающий класс должен иметь одно определение. Например,
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 ); } }
Вывод на консоль будет таким же, как показано выше.

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

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