class B : A {}
class Sub<T> where T:A
{
//...
}
我想将Sub实例存储在一个集合中。
var c = new List<Sub<A>>();
c.Add(new Sub<B>()); //doesn't work
但是,为了让它真正工作,我必须声明一个接口并存储该接口的实例。
interface IBase
{
void DoStuff(A a);
}
var c = new List<IBase>();
c.Add(new Sub<B>()); //work
我使用List.Contains来判断变量是否在列表中,但是它不断地返回它不是的时候。
我已经查找了,并注意到我必须继承IEquatable并实现自己的.Equals方法。实际的类是从另一个类继承的,因此我在基类.Equals 中编写了方法。
下面是“Actividad”类的代码:
abstract public class Actividad:IEquatable<Actividad> {
protected int codigo;
[...]
public bool Equals(Actividad otra)
{
ret
考虑以下代码:
public interface IStuff<T>
{
IList<T> Items { get; set; }
bool IsExpanded { get; set; }
}
public interface IBar
{
string Name { get; set; }
}
public interface IFoo : IBar, IStuff<IBar>
{
}
public class MyClass : IFoo
{
public Name {get;set;
public IL
在我的应用程序中,我使用不同的web来获取汽车信息。对于我已经实现的服务,我实现了ICarService。由于所有这些Api返回的汽车数据都不一样,我已经实现了ICar接口,因此每个服务都可以返回自己类型的汽车,但在我的应用程序中,我可以使用“通用”ICar。
以下是我的实现:
// Car Model
public interface ICar
{
string Color { get; }
}
public class CarApiA : ICar
{
public int car_color { get; set; }
public Color
{
我有一个非常基本的代码来重现这个问题:
public class Main {
public static <T extends Number> void bar(Wrapper<List<T>> wrapper) {
// do something
}
public static void foo(Wrapper<List<? extends Number>> wrapper) {
// do something
}
public static <T extends Number>
我得到以下错误
与`System.Collections.Generic.List>.Add(MyContainer)‘匹配的最佳重载方法具有一些无效参数(CS1502) (GenericsTest)
对于以下类:
A和B是MyBase的子类。
public class GenericConstraintsTest
{
private MyList<MyContainer<MyBase>> myList = new MyList<MyContainer<MyBase>>();
public GenericConstrai
我有一些逻辑,类似于下面简单的描述。谁能给我解释一下为什么fB()的执行会显示不匹配?
interface SomeInterface<T> {
fun showMe(aa: T)
fun getOne(): T
}
interface Jsonizer {
//something here
}
data class Template (val id: String): Jsonizer
object SomeImpl: SomeInterface<Template> {
override fun showMe(aa: Template)
我在创建查询类的泛型列表时遇到了一个问题。这些查询类是从具有自引用类型约束的抽象泛型基类派生的。
精简的基类和派生类包括:
public abstract class AbstractQuery<TQuery, TResult>
where TQuery : AbstractQuery<TQuery, TResult>
{
public IEnumerable<TResult> Query ()
{
return new List<TResult>();
}
}
public class Fi
我注意到,与C++不同的是,在C#中,您可以组合使用虚拟方法和泛型方法。例如:
using System.Diagnostics;
class Base {
public virtual void Concrete() {Debug.WriteLine("base concrete");}
public virtual void Generic<T>() {Debug.WriteLine("base generic");}
}
class Derived : Base {
public override void Conc
我有以下类(其中一些在PRISM框架中,不能更改):
public abstract class NetworkEventBase<T> : CompositePresentationEvent<T> where T : NetworkEventPayload { }
public class NetworkEventPayload { }
public class TestEvent : NetworkEventBase<TestPayload> { }
public class TestPayload : NetworkEventPayload { }
// The Structure of the Container and the items
public interface IContainer <TItem> where TItem : IItem
{
}
public class AContainer : IContainer<ItemA>
{
}
public interface IItem
{
}
public class ItemA : IItem
{
}
// Client app
[Test]
public void Test ()
{
IContainer<IItem&g
我有这个类和方法
public class Base{ // members;}
public class Derived : Base{// members}
myMethod(IEnumerable<Base> in1);
尝试像这样调用myMethod:
myMethod(IEnumerable<Derived > in2);
得到编译错误?我该怎么解决呢?
即
struct Child<Type> {
var item: Type
}
class Parent {
var children = [Child<**ANY subclass of UIView, for example**>]()
}
所以如果我有
let one = Child(item: UIView())
let two = Child(item: UITableView())
我想要一份
let parent = Parent()
parent.children += [one,two]
如果您使用[Child<UIView&
我有以下几个类:
// -- model hierarchy
public interface IJob {
}
public abstract class AbstractJob : IJob {
}
public class FullTimeJob : AbstractJob {
}
// -- dao hierarchy
public interface IJobDao<T> where T : IJob {
T findById(long jobId);
long insert(T job);
}
public i
有人能给我解释一下为什么在下面的代码示例中标记为//this line gives a compile error (why?)的代码行不能工作吗?
import java.util.ArrayList;
public class GenericCastCheck {
class A{
}
class B extends A{
}
public static void main(String[] args) {
A aObject = new A();
B bObject = new B();
public class Base {...}
public class Complex: Base {...}
public class MyOtherClass<T> {...}
和两种类型的列表
List<MyOtherClass<Complex>> listOfComplex
List<MyOtherClass<Base>> listOfBase
我想要一份清单
listOfComplex.Union(listOfBase)
但是我不能将一个类型的泛型转换成另一个类型的泛型,即使复杂的派生自基基,它有可能有一个基类的列表?
我有一个带有部分视图的ASP.NET Razor项目,它的模型使用了元组类型。其中一个元组元素使用接口作为其类型。当使用一个类型为接口的对象调用部分视图时,它可以工作。但是当使用实现接口的类调用它时,它会抛出一个异常。
我已经创建了一个来复制这个错误。
该项目定义了一个具有类实现的接口:
public interface ISampleInterface
{
int Value { get; }
}
public class ImplementationClass : ISampleInterface
{
public int Value => 5;
}
在Page中,
以下总结了我对C#中差异的理解。如果你能告诉我问题出在哪里,我会很感激,因为我读过埃里克·利珀特( Eric )在上发表的那篇文章,我无法理解其中的大部分内容。
方差是指一种类型的转换(或者像Eric Lippert所说的那样的投影)可以保持赋值兼容性(协方差),或者逆转它(反方差),或者既不能保持它,也不能逆转它(不变性)。也就是说,如果我是T中的协变量转换,其中T是一组类型,那么对于T中的任何T1和T2类型,如果T1可分配给T2,则I<T1>可分配给I<T2>。如果我是反差的话,结果就会恢复。如果我是不变的,那么I<T1>既不能分配给I<T2>
我有以下几个类:
public class BagA : Dictionary<string, BagB>
{}
public class BagB : Dictionary<string, object>
{}
现在,通过反射,我创建了一个类型为BagB的对象,并试图将其添加到我创建的类型为BagA的对象中:
object MyBagA // Created through reflection
object MyBagB // Created through reflection
((Dictionary<string,object>)MyBagA).
我在将对象转换到它的实现接口时遇到了问题,在不同的程序集中,接口也在使用泛型。
我有三个图书馆。契约(接口位置)实现(接口实现) MainAssembly (碰巧是ASP.NET MVC5应用程序)
主要参考合同和实现。实现引用契约。
契约包含两个接口,一个使用另一个接口类型的泛型
public interface IConfig{}
public interface IStore<TConfig> where TConfig : IConfig{}
实现包含两个实现这些接口的类,如下所示。
public class ConfigBase : IConfig {}
public c
考虑到下面的接口和类型,我想要一个PartyDao的接口:
public interface IPartyDao<IdT> : IDao<Party<IdT>> where IdT : struct{}
我不能这样做,因为编译器认为不能将一方转换为EntityWithTypedId。看一看一个缔约方的签名,它似乎是一个EntityWithTypedId,因此s/b可转换为一个。
除了编译器总是正确的事实之外,为什么在这种情况下是正确的呢?有解决办法吗?
至少在美学上,大部分不好的地方来自于使用IdT,但是
// IdT is just the id,