2015-01-19 2 views
0

У меня есть статический класс, который я использовал, потому что мне не нравилась идея обхода гигантского файла настроек, но затем я хотел иметь возможность подписываться на статические события в статическом классе.C# Можно ли использовать шаблон слабых событий со статическим классом?

Я искал использование метода AddListener PropertyChangedEventManager, но для него нужно добавить экземпляр.

это даже возможно? я на .net 4.0, если это имеет значение.

+5

попробовать, и посмотреть, что происходит. Если это не сработает, сообщите нам конкретно * почему * он не работает, а также код, который вы используете. – Servy

+0

вы консультировались с «Документацией MSDN» [PropertyChangedEventManager] (http://msdn.microsoft.com/en-us/library/system.componentmodel.propertychangedeventmanager%28v=vs.110%29.aspx) – MethodMan

+0

Простой список 'WeakReference ' где T является делегатом? – Chris

ответ

0

У вас может быть статическое событие и подписываться на несколько экземпляров. Вам просто нужно иметь в виду, что все экземпляры, которые подключены, получат уведомление о событии и их реализации. Это также может иметь проблемы с управлением памятью, ваши экземпляры не выйдут из области действия и получат GC'd, пока они не освободятся от события.

Вот пример сценария, чтобы показать:

delegate void Pop(); 
static event Pop PopEvent; 

void Main() 
{ 
    var t1= new Thing("firstone"); 
    var t2= new Thing("secondOne"); 

    //fire event 
    PopEvent(); 
} 

public class Thing 
{ 
    public Thing(string name) 
    { 
     this.name = name; 
     PopEvent += this.popHandler; 
    } 

    private string name=""; 

    public void popHandler() 
    { 
     Console.WriteLine("Event handled in {0}",this.name); 
    } 

} 

Выход:

Event handled in firstone Event handled in secondOne

+0

Вопрос заключается в конкретном вопросе об использовании шаблона события, который использует слабые ссылки специально, чтобы он * не * сохранял объекты, на которые ссылаются, на оставшуюся часть времени жизни приложений. Это не касается этого вообще. – Servy

+0

Да, это похоже на то, что я пытаюсь, так как я не могу заставить шаблон слабых событий работать. Но когда я регистрируюсь на статическое событие и подписываюсь на него с использованием статического класса, визуальная студия, похоже, не признает, что это событие использовалось, что вызывает раздражающее предупреждение. Я могу отключить его, хотя думаю, хотя я чувствую, что он не должен меня предупреждать вообще. Почему он не признает использование статического события? –

+0

@JamesJoshuaStreet Предупреждение связано с тем, что поле поддержки не используется. Вы должны поднять это событие где-нибудь, тогда это предупреждение исчезнет. Не игнорируйте предупреждения. –

Смежные вопросы