2013-08-25 5 views
1

Я читал разницу между singleton и static class, но единственное, что я узнал, это то, что singleton дает вам состояние, может реализовывать интерфейсы и выводить, в то время как у статического класса эти вещи не имеют. Я не (возможно, не буду) нуждаюсь в реализации интерфейсов или из классов, поэтому я считаю, что статический класс - это правильная вещь. Но я хотел бы узнать больше об этом состоянии объекта против статического класса без гражданства. Как бы вы определили состояние объекта? Является ли состояние пригодным для повторного использования для событий на одной странице WPF? Это может быть глупый вопрос, но я никогда не следовал теории, я просто закодировал вещи для работы :) Вот почему я изучаю их сейчас.Метод WPF, повторно используемый на нескольких страницах - должен ли я использовать статический класс или singleton?

Назад к теме. У меня есть 1 метод, который одушевляет ярлык, который используется на различных лейблах на разных страницах WPF:

private void SetUpAnimation() 
    { 
     DoubleAnimation doubleAnimation = new DoubleAnimation(); 
     doubleAnimation.From = -LabelNameSong.ActualWidth; 
     doubleAnimation.To = CanMain.ActualWidth; 
     doubleAnimation.RepeatBehavior = RepeatBehavior.Forever; 
     doubleAnimation.Duration = new Duration(TimeSpan.Parse("0:0:10")); 
     LabelNameSong.BeginAnimation(Canvas.RightProperty, doubleAnimation); 
    } 

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

Некоторые советы оценили. Спасибо.

ответ

1

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

a singleton - это шаблон дизайна, при котором обычный класс имеет один объект и этот объект повторно используется. Одноэлемент может иметь значения, которые он обрабатывает, но поскольку объект создается только один раз, каждый другой объект, взаимодействующий с синглоном, будет извлекать из одних и тех же значений. Синглтоны полезны, если у вас есть значения, которые могут потребоваться изменить в течение всего срока службы приложения, но они должны быть разделены, или если у вас есть методы, которые требуют сохранения и получения значений позже.

+0

Спасибо, сэр за глубокое объяснение. Теперь я понимаю разницу. Только одно. Вы сказали, что каждый объект взаимодействует с синглтоном, будет рисовать из тех же значений. Итак, как только вы инициализируете singleton, он работает как глобальный класс для приложения? –

+1

Да - всего один экземпляр каждого одноэлементного класса в AppDomain. На практике для всех случаев, когда вы не играете с AppDomains, это означает, что экземпляр singleton уникален в приложении. –

+0

После создания объекта Singleton объект является глобальным для приложения, предполагая, что у вас есть ссылка на объект, который хранится или передается. Одиночные объекты обманчиво трудны для эффективного управления без какой-либо структуры зависимостей Injection (популярные контейнеры DI для .Net включают ninject, StructureMap, CastleWindsor) – Claies

2

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

+0

Спасибо, сэр. Пойдет со статикой. –

1

Проще говоря, состояние - это данные, которые хранятся между несколькими вызовами методов. Поэтому для чего-то, что не нужно ничего хранить и возвращать к нему позже, просто используйте статический метод. Это была бы моя рекомендация здесь.

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

+0

Благодарим вас за разъяснение штата. –

1

Просто

Статический класс, если методы не имеют доступа к глобальным переменным в классе

Singleton, если у вас есть глобальные переменные, такие как список

+0

Я не согласен. Глобальные переменные могут быть статическими и доступны с помощью статических методов. У синглтонов есть другие преимущества, но они не являются единственным способом реализации глобального состояния. –

+0

Ваш вопрос недействителен. Это определение шаблона Singleton. И если у вас есть статические переменные, ваш дизайн ошибочен. –

+0

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