Es allí una manera a sólo requieren que un objeto de implementar los miembros de una interfaz sin que sea explícitamente implementar en c#?

0

Pregunta

Estoy haciendo un control personalizado similar a la de una ItemsControl por lo que tiene una Items propiedad quiero ser enlazable, pero en fin para mi el control de actualizar, la propiedad debe implementar INotifyCollectionChanged. Me gustaría que el usuario sea capaz de enlazar cualquier objeto en tanto se implementa tanto INotifyCollectionChanged y IList.

Mientras que la solución más simple es crear una nueva lista de interfaz como así

public interface INotifyCollectionChangedAndList : INotifyCollectionChanged, IList { }

y requiere que se heredan en su costumbre objetos de colección.

Sin embargo, en lugar de hacer esto, ellos también deben ser capaces de utilizar el estándar ObservableCollection<T> así que ¿la heredan tanto INotifyCollectionChanged y IList pero no se heredan INotifyCollectionChangedAndList y realmente no tengo control sobre eso. Asimismo, si el uso de una biblioteca diferente, con un tipo que no pueden controlar que no implementar las dos interfaces que todavía debe trabajar.

Así que mi pregunta es si hay una manera, fácil o de otro tipo (por ejemplo, la reflexión) donde puedo especificar cualquier tipo utilizado debe implementar todos los requisitos de dos (o más) de las interfaces sin el explícito SomeClass : INotifyCollectionChangedAndList?

EDITAR

Creo que la respuesta es no. Así que me voy a mark @benjamin respuesta como correcta porque a pesar de que podría no ser el mejor para el control de los autores, en otros casos la cosa más cercana a lo que sería de otra manera gustaría lograr.

1

Mejor respuesta

1

Sí, los hay. Usted no necesita reflexión. Acaba de hacer su clase genérica y especifica que cualquiera que sea el tipo de parámetro es pasado debe implementar ambas interfaces:

    public class ItemsController<TModel, TItem> where TModel : INotifyPropertyChanged, IEnumerable<TItem>
    {
        public TModel Model { get; set; }
    }

TModel puede ser cualquier cosa que implementa las interfaces que requieren, para que usted sepa siempre que su ItemsControllers tendrá un Modelo de propiedad de tipo TModel que implementa INotifyPropertyChanged y también tiene un Items la propiedad de tipo IEnumerable<TItem>.

2021-11-23 01:09:01

Esa es la propery manera de constrainting el tipo de param. Sin embargo, usted no puede utilizar una clase en la norma XAML, porque de esos tipo de parámetros... Tipo de parámetros se debe evitar en control / fw clases de elementos, etc...
lidqy

Me hizo olvidar sobre el tipo de restricciones, sino como lidqy menciona los controles no se puede utilizar genéricos fácilmente y Microsoft desaconseja en sus directrices. El usuario final no tiene que meterse con XAML y los genéricos.
Michael Wagner

En .NET 6.0 algunos de los marcos de apoyo genérico de los controles. Blazor hace, pero yo no sé acerca de WPF. Si usted no tiene apoyo, tal vez se podría crear un tipo derivado de que se cierra el genérico del tipo base.
benjamin

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................