当前位置: 首页 > 知识库问答 >
问题:

C#中的存在类型?

何建中
2023-03-14

我目前在C#中面临一个问题,我认为可以使用存在类型来解决这个问题。然而,我真的不知道它们是否可以在C#中创建,或者模拟(使用其他构造)。

public interface MyInterface<T>
{
    T GetSomething();
    void DoSomething(T something);
}

public class MyIntClass : MyInterface<int>
{
    int GetSomething()
    {
        return 42;
    }

    void DoSomething(int something)
    {
        Console.Write(something);
    }
}

public class MyStringClass : MyInterface<string>
{
    string GetSomething()
    {
        return "Something";
    }

    void DoSomething(string something)
    {
        SomeStaticClass.DoSomethingWithString(something);
    }
}
public static void DoALotOfThingsTwice(){
    var listOfThings = new List<MyInterface<T>>(){
        new MyIntClass(),
        new MyStringClass();
    };

    foreach (MyInterface<T> thingDoer in listOfThings){
        T something = thingDoer.GetSomething();
        thingDoer.DoSomething(something);
        thingDoer.DoSomething(something);
    }
}
public static void DoALotOfThingsTwice(){
    var listOfThings = new List<∃T.MyInterface<T>>(){
        new MyIntClass(),
        new MyStringClass();
    };

    foreach (∃T.MyInterface<T> thingDoer in listOfThings){
        T something = thingDoer.GetSomething();
        thingDoer.DoSomething(something);
        thingDoer.DoSomething(something);
    }
}

共有1个答案

柯星华
2023-03-14

由于doalotofthingstwice不依赖于t,因此可以将其包装在操作中,并将其存储在列表中。

public static Action DoSomethingTwice<T>(this MyInterface<T> i)
{
    return () =>
    {
        T something = i.GetSomething();
        i.DoSomething(something);
        i.DoSomething(something);
    };
}

然后

var listOfThings = new List<Action>() {
    new MyIntClass().DoSomethingTwice(),
    new MyStringClass().DoSomethingTwice()
};
 类似资料:
  • 存储类定义 C++ 程序中变量/函数的范围(可见性)和生命周期。这些说明符放置在它们所修饰的类型之前。下面列出 C++ 程序中可用的存储类: auto register static extern mutable thread_local (C++11) 从 C++ 11 开始,auto 关键字不再是 C++ 存储类说明符,且 register 关键字被弃用。 auto 存储类 自 C++ 11

  • 我试图做到以下几点:一个模板化的类应该提供一些函数,这些函数取决于它模板化的类型是否包含一个具有给定名称的成员变量。作为示例,下面的伪代码应该只在模板化的结构/类具有名为“id”的成员时才提供“printId()”: 通过研究SFINAE,traits,std::enable_if和StackOverflow,我认为这是可以做到的...但是我不知为什么没有将enable_if与以下问题中的片段结合

  • 我想写一个行为几乎等同于Python字典的C++对象。C++的和提供了Python词典已经具备的一些功能,但缺少一个最重要的功能,即能够添加任意对象和类型。即使这是不可能的,您能在多大程度上实现Python字典的功能? 前面的几个问题(这里和这里)未能处理向字典中添加多个类型的问题。 我认为最好的解决方案是使用指针对数据进行重新解释,或者使用某种带有类型限制的运行时多态性?

  • 我有一个基类,然后有两个派生类。我使用基类的指针在Vector中存储派生类对象。现在我必须打印存储在vector中的数据 如何从向量中检索对象。 如何确定检索到的对象属于哪个派生类。 在这里,我使用向量将对象存储在向量中。 int main() {

  • 我最近参加了一次面试,其中一次面试问到要写一个ATM交易类图。我卡住了,用登录->检查余额等写了简单的框。但是,我们有任何标准的方法来编写类图吗?如果有,任何机构都可以为ATM交易或任何其他活动编写类图。类图的意义是什么?类图和UML图的区别是什么?

  • 假设我们有一个类,如下所示: 因此,在这里,我需要以某种方式存储容器的类型(或)。我知道在我的程序的这一点,它是完全确定的。我需要存储它,因为稍后我可能不得不将我的强制转换回或,例如在另一个函数中: 我考虑过使用包含所有不同受支持类型的值的并将该类型保存在该枚举类型的附加成员变量中。然后,我必须使用语句来检查所有不同的可能性并执行正确的强制转换。但是,我想是不是没有更简单的方法。 我主要想做的是存