.NET: Неспособный бросить объект взаимодействовать через интерфейс это реализует

DrevanTronder прав, но он не отвечает на вопрос правильно, так как вы спрашиваете, как делать события в pygame без GUI, как показано в вашем примере кодирования.

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

«Если дисплей не был инициализирован и видеорежим не установлен, очередь событий не будет работать». https://www.pygame.org/docs/ref/event.html

Но, конечно, если вы специально не говорите об обработке событий, тогда DrevanTronder верен ; все, что вам нужно сделать, это импортировать модуль с «import pygame» и инициализировать его с помощью «pygame.init ()».

Надеюсь, что это поможет!

23
задан Ryan Lundy 20 October 2009 в 19:32
поделиться

5 ответов

Я столкнулся с той же проблемой, и я просто добавил следующий код

private void LoadAssemblyPlugins(string dll)

    Assembly ass = AppDomain.CurrentDomain.GetAssemblies()
        .FirstOrDefault(a => new Uri(a.CodeBase).Equals(new Uri(dll)));

   if (ass == null)
       // Load it here
       // use activator here

, Хотя, в производстве это никогда не будет проблема, в модульном тесте это было слишком теперь, я не должен загрузить его снова и создать "другой тип"

0
ответ дан 28 November 2019 в 22:45
поделиться

Наиболее вероятный Причина в том, что IFrameworkClient в обоих случаях принадлежит другой сборке и, следовательно, является другим типом .NET. Даже если это один и тот же код, он может быть другого типа.

Проверьте AssemblyQualifiedName . Также обратите внимание, что если вы загружаете эту сборку с отражением, вы можете получить другой тип даже с тем же AssemblyQualifiedName , благодаря load-context.

11
ответ дан 28 November 2019 в 22:45
поделиться

Something tells me your sample code is leaving some stuff out...

class Program
{
    static void Main(string[] args)
    {
        var type = typeof(MyClass);
        object obj = Activator.CreateInstance(type);
        Type[] interfaces = obj.GetType().GetInterfaces();

        var m_Client = (UserControl)obj;          
        IFrameworkClient fc = (IFrameworkClient)obj;
    }
}

public interface IFrameworkClient { }

public class UserControl { }

public class MyClass : UserControl, IFrameworkClient { }

This compiles and runs.

I'm betting that the DLL containing the definition of IFrameworkClient hasn't yet been loaded before you try to cast. This can happen when you're using Activator.CreateInstance.

Try inserting var forceLoad = typeof(IFrameworkClient); before the cast.

3
ответ дан 28 November 2019 в 22:45
поделиться

If the class FPG.H60.AFF.TabControlH60 actually does implement IFrameworkClient there should be no reason this would fail. The only thing I can think of that causes this exception is if the assembly that contains IFrameworkClient is strongly named and the Tab Control object happens to reference a different version of the containing assembly or your are using a different interface with the name IFrameworkClient.

0
ответ дан 28 November 2019 в 22:45
поделиться

The cast isn't working because you're trying to cast from type object to the interface. If you replace the interface cast line with:

IFrameworkClient fc = (IFrameworkClient)m_Client;

It will work.

Alternately, I'm mildly certain that you could do the cast from the object to the interface with the as operator.

See this article for more information: http://blogs.msdn.com/ericlippert/archive/2009/10/08/what-s-the-difference-between-as-and-cast-operators.aspx

Еще одна часть головоломка. Интерфейсы не являются производными от объекта : http://blogs.msdn.com/ericlippert/archive/2009/08/06/not-everything-derives-from-object.aspx

-1
ответ дан 28 November 2019 в 22:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: