Мне удалось добиться этого, используя настройки файла манифеста вместо использования кода, чтобы повлиять на значок и цвет для использования.
<!-- Set custom default icon. This is used when no icon is set for incoming notification messages. -->
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/ic_stat_ic_notification" />
<!-- Set color used with incoming notification messages. This is used when no color is set for the incoming notification message. -->
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/colorAccent" />
Вы сталкиваетесь с проблемой, потому что Вы использовали явную интерфейсную реализацию (EII). Когда участник явно реализован, к этому нельзя получить доступ через экземпляр класса - только через экземпляр интерфейса. В Вашем примере вот почему Вы не можете звонить DoCool()
если Вы не бросаете свой экземпляр к IDoesCoolThings
.
Решение состоит в том, чтобы сделать DoCool()
общественность и удаляет явную интерфейсную реализацию:
public abstract class AbstractWidget : IDoesCoolThings
{
public void DoCool() // DoCool() is part of the abstract class implementation.
{
Console.Write("I did something cool.");
}
}
// ...
var rw = new RealWidget();
rw.DoCool(); // Works!
В целом Вы используете EII в двух случаях:
Измените свое объявление на:
public abstract class AbstractWidget : IDoesCoolThings
{
public void DoCool()
{
Console.Write("I did something cool.");
}
}
Путем Вы реализуете интерфейс, явная реализация, пустая IDoesCoolThings. DoCool (), если Вы выбираете неявный интерфейс реализации.
public abstract class AbstractWidget : IDoesCoolThings
{
public void DoCool()
{
Console.Write("I did something cool.");
}
}
Затем это будет работать.
Чтение это:
Интерфейсы C#. Неявная реализация по сравнению с Явной реализацией