|
Программирование >> Программирование с использованием ajax
Такой код тоже был бы допустимым: MyClass myObj = new MyClass (); IMylnterface mylnt = myObj; mylnt.DoSomething() ; Если же MyDerivedClass реализовал бы DoSomething явно, тогда использовать бы можно было только второй прием. Необходимый для этого код выглядит следующим образом: public class MyClass : IMylnterface { void IMylnterface.DoSomething () public void DoSomethingElse () Здесь метод DoSomething реализуется явно, a метод DoSomethingElse - неявно. Получать доступ непосредственно через экземпляр объекта myClass можно только к последнему. Добавление в свойства блоков get и set с уровнем доступности, отличным OTpviblic Ранее было сказано, что при реализации интерфейса со свойством нужно обязательно реализовать соответствующие блоки get и set. Это не совсем так: в свойство внутри класса, где определяющий это свойство интерфейс содержит только блок set, допускается добавлять блок get и наоборот. Подобное, однако, допускается только в случае использования для этого блока более ограничительного модификатора доступа, чем у того, что определен в интерфейсе. Из-за того, что блоки, определяемые в интерфейсе, изначально имеют уровень доступа public, получается, что добавлять можно только блоки с уровнем, отличным от public. Ниже приведен пример: public interface IMylnterface { int MylntProperty { get; public class MyBaseClass : IMylnterface { protected int mylnt; public int MylntProperty { get { return mylnt; protected set mylnt = value; Частичные определения классов При создании классов с множеством членов одного или другого типа дело может довольно сильно усложняться, а файлы кода - становится очень длинными. Одним из приемов, который способен помогать в подобных случаях и который уже демонстрировался в предыдущих главах, является организации кода по разделам. Определение разделов в коде позволяет сворачивать и разворачивать их и тем самым делать код более удобным для восприятия. Например, определение класса может выглядеть следующим образом: public class MyClass { #region Fields private int mylnt; #endregion #region Constructor public MyClass 0 { mylnt = 99; #endregion #region Properties public int Mylnt { get { return mylnt; mylnt = value; #endregion #region Methods public void DoSomething0 Выполнение каких-нибудь действий... #endregion Здесь можно разворачивать и сворачивать поля, свойства, конструктор и методы класса, концентрируя внимание только на том коде, который представляет интерес. Подобным образом могут также создаваться и вложенные разделы, т.е. такие, которые должны становиться видимыми только при разворачивании того раздела, внутри которого они содержатся. Однако даже в случае применения такого приема ситуация все равно может выйти из-под контроля. Поэтому существует еще один, альтернативный вариант и заключается он в использовании частичных определений классов. Проще говоря, он подразумевает разбиение определения класса на несколько файлов, помещая, например, определения полей, свойств и конструктора в один файл, а методов - в другой. Все, что для этого требуется - это просто использовать ключевое слово partial с классом в каждом файле, который содержит ту или иную часть его определения: public partial class MyClass В случае применения частичных определений классов ключевое слово partial должно присутствовать в каждом из содержащих часть определения файлов. Частичные классы очень часто используются в Windows-приложениях для сокрытия кода, отвечающего за компоновку форм. На самом деле это уже демонстрировалось в главе 2. Код формы Windows в классе по имени Forml, например, хранился и файле Forml. cs, и в файле Forml. Designer. cs. Это позволяет концентрировать внимание на функциональных возможностях форм, не беспокоясь о дополнении кода не представляющей интерес информацией. Напоследок важно обратить внимание на еще одну касающуюся частичных классов деталь, а именно на то, что интерфейсы, применяемые к одной части частичного класса, применяются ко всему классу. Это значит, что определение: public partial class MyClass : IMylntefacel public partial class MyClass : IMyInteface2 будет эквивалентно определению: public class MyClass : IMylntefacel, IMyInteface2 To же самое касается и атрибутов, о которых более подробно будет рассказываться в главе 27. Частичные определения методов в частичных классах могут также определяться и частичные методы. Такие методы определяются в одном частичном определении класса без тела, а реализуются в другом частичном определении класса. И в том, и в другом месте с ними обязательно используется ключевое слово partial: public partial class MyClass { partial void MyPartialMethod () ; public partial class MyClass { partial void MyPartialMethod() Реализация метода Частичные методы могут быть статическими, но всегда являются приватными и не могут иметь возвращаемого значения. Любые используемые в них параметры не могут быть параметрами out, хотя и могут быть параметрами ref. С ними не может
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |