Проблема с вашим кодом в том, что вы создаете два отдельных экземпляра класса B
. В A
вы пытаетесь вызвать событие в одном случае B
. В C
вы пытаетесь обработать событие, вызванное , используя экземпляр разности B
.
Кажется, что вы пытались сделать правильную вещь, создав метод Connect
в C
, но именно здесь вы должны передать существующий экземпляр B
до C
[ 1114].
Если бы вы написали свой код так, он бы работал:
class A
{
public void Button_Click(object sender, RoutedEventArgs e)
{
B senders = new B();
C c = new C();
c.Connect(senders);
senders.OnPageSwap(new StartEventArgs());
}
}
public delegate void StartEventHandler(object sender, StartEventArgs e);
public class B
{
public event StartEventHandler PageSwap;
public virtual void OnPageSwap(StartEventArgs e)
{
Console.WriteLine("Entered PageSwapSender");
if (PageSwap != null) PageSwap(this, e);
}
}
class C
{
public void Connect(B sender)
{
sender.PageSwap += new StartEventHandler(this.sender_PageSwap);
Console.WriteLine("Entered Connect");
}
private void sender_PageSwap(object sender, StartEventArgs e)
{
Console.WriteLine("Entered Handler");
}
}
Можно указать для применения шаблона максимально часто с:
String[] de = data.split(";", -1);
Посмотрите Javadoc для метода разделения, берущего два аргумента в пользу деталей.
взгляните на эти документы , здесь важная кавычка:
[...] the array can have any length, and trailing empty strings will be discarded.
, Если Вам не нравится это, взгляните на комментарий Fabian. При вызове String.split(String)
, это звонит String.split(String, 0)
, и это отбрасывает запаздывание пустых строк (поскольку в документах говорится это), при вызове String.split(String, n)
с n < 0
это ничего не отбросит.