ГЛАВНАЯ     АРХИВ     НАПИСАТЬ АДМИНУ     ПОДПИСАТЬСЯ НА RSS     ВОЙТИ      

Поиск

Категории

Облако тегов

  << Предыдущий пост       Следующий пост >>  
От: inbruk
29. ноября 2010 02:30

Многие объекты в приложениях под .NET хранятся в иерархии. Например: визуальные контролы, файлы и папки, и т.д. Есть много различных алгоритмов для нахождения корня иерархии.
Вот один из них:



SomeObject root = firstObject;
SomeObject parent = this.Parent;

while (parent != null)
{
root = parent;
parent = parent.Parent;
}

Здесь с firstObject начинаем поиск, а в root в конце работы остается искомый корень.

Дальше идет простая консольная программа на C#, демонстрирующая такой подход. Важно, что корень получает метод GetRoot (), а не некое свойство. Возврат корня методом сделан для того чтобы подчеркнуть: при каждом возвращении происходит пересчет корня. Это сделано подобно тому, что класс Control имеет метод FindForm().


using System;
using System.Collections.Generic;

namespace ConsoleApplication1
{
class Program
{
static void Main( string[] args )
{
SomeUsefulClass a = new SomeUsefulClass( "a" );
SomeUsefulClass b = new SomeUsefulClass( "b" );
SomeUsefulClass c = new SomeUsefulClass( "c" );
SomeUsefulClass d = new SomeUsefulClass( "d" );

a.AddChild( b );
b.AddChild( c );
c.AddChild( d );

Write( a );
Write( b );
Write( c );
Write( d );

Console.ReadKey(true);
}
static void Write( SomeUsefulClass obj )
{
string objName = obj.Name;
SomeUsefulClass parent = obj.Parent;
string parentName = parent == null ? "none" : parent.Name;
SomeUsefulClass root = obj.GetRoot();
string rootName = root == null ? "none" : root.Name;
Console.WriteLine( "Object={0}, Parent={1}, Root={2}", objName, parentName, rootName );
}
}
class SomeUsefulClass
{
public SomeUsefulClass()
{
}
public SomeUsefulClass( string name )
{
this.m_Name = name;
}
private string m_Name;
public string Name
{
get
{
return this.m_Name;
}
set
{
this.m_Name = value;
}
}
public override string ToString()
{
return this.m_Name;
}
private SomeUsefulClass m_Parent;
public SomeUsefulClass Parent
{
get
{
return this.m_Parent;
}
}
private List<SomeUsefulClass> m_Children = new List<SomeUsefulClass>();
public void AddChild( SomeUsefulClass obj )
{
this.m_Children.Add( obj );
obj.m_Parent = this;
}
public IEnumerator<SomeUsefulClass> Children
{
get
{
return this.m_Children.GetEnumerator();
}
}
public SomeUsefulClass GetRoot()
{
SomeUsefulClass root = this;
SomeUsefulClass parent = this.Parent;

while (parent != null)
{
root = parent;
parent = parent.Parent;
}

return root;
}
}
}


Смотрите видео про игрун камикадзе 2 на igruncom.ru. У меня получается 2 неделю.

Похожие записи


Вопросы на собеседовании C#, Net, ASP.NET, SQL
Продолжая тему вопросов на собеседовании. Нашел еще одну подборку. Оригинал лежит здесь . Перенес, чтобы не затерялось. Есть вполне вменяемые ответы (хотя, на некоторые вопросы ответил бы по-другому). Ответы находятся после списка вопросов, я их не менял. 23. Что такое шаблон проектирования Model/View/Controller? Как и зачем его применяют? 2...

Способы заработка на сайте
На этом блоге было много постов про производство и раскрутку сайтов. Но пока не было про заработок на них. Пора исправить этот недочет. Здесь будут описаны по возможности не фантастичные, и не супер низко прибыльные способы. Также упор будет сделан именно на организацию процесса, а не технических деталях, которых в обилии в интернете. Несмотря на то, что как пр...

Silverlight, HTML5 и непрозрачная стратегия развития Microsoft
Оригинал статьи взят отсюда: Silverlight, HTML5 и непрозрачная стратегия развития Microsoft Автор: Peter Bright Переводчик: Mairon     По непонятным мне на данный момент причинам, похоже, что многие разработчики, присутствовавшие на недавней конференции PDC-2010 (Крупнейшая конференция Microsoft для разработчиков — Прим. переводчика), были сильн...

Комментарии

 
nobelwerfer 29.07.2011 18:48:09 #

таинства деревьев раскрываете школьникам

Добавить комментарий




biuquote
  • Комментарий
  • Предпросмотр
Loading


  Сохранить комментарий