如何通过索引或其他更好的方式访问另一个类中的泛型类方法?

我想要的是通过索引或通过一些更好的方式“动态”访问类内泛型类的方法。 “动态地”因为在这个主类中不仅会有两个泛型类,所以我想要一种简单的方法来访问泛型类的方法,因为一直调用所有方法会让人筋疲力尽。 这是课程和我已经尝试过的:

public class ListOfPowerClass
{
    public PowerClass<SomePowerClassOne> PowerOne = new PowerClass<SomePowerClassOne>(new SomePowerClassOne(),false);
    public PowerClass<SomePowerClassTwo> PowerTwo = new PowerClass<SomePowerClassTwo>(new SomePowerClassTwo(),false);    
    .....
    public PowerClass<SomePowerClassn> PowerN = new PowerClass<SomePowerClassn>(new SomePowerClassn(),false);

    public class PowerClass<T> where T : class 
    {
            public bool I_Have;
            public T Power;      

            public PowerClass(T _Power,bool _active)
            {
                Power = _Power;
                active = _active;
            }
    } 
}

这是每个类中的方法。

public class SomePowerClassOne
{
    ///Some methods
}

public class SomePowerClassTwo
{
    ///Some methods
}

这就是我想要做的:

public int index; //This index will change and I will access different classes.
public ListOfPowerClass PowerList = new ListOfPowerClass();
PowerList[index].Print(); ///index = 0,I will access class PowerOne 
PowerList[index].Print(); ///index = 1,I will access class PowerTwo
PowerList[index].Print(); ///index = 2,I will access class PowerThree and so on

我在谷歌上搜索并发现了索引器([int index]),但我现在不知道为什么我不能应用到“ListOfPowerClass”类或任何如下所示的方法,因为它只是抛出一个语法错误.:

public class ListOfPowerClass [int index]
public T ReturnClass<T>(int index) [int index]
public class PowerClass<T> where T : class [int index]

而且我还发现了反射,但老实说,我对我阅读的任何内容都不了解,也不知道如何使其与我的代码一起工作。

raners 回答:如何通过索引或其他更好的方式访问另一个类中的泛型类方法?

如果要使用 IndexersListOfPowerClass 类视为数组,请将 ListOfPowerClass 类代码更改如下:

public class ListOfPowerClass
{
    public PowerClass<ISomePowerClass>[] powerClasses = new PowerClass<ISomePowerClass>[]
    {
        new PowerClass<ISomePowerClass>(new SomePowerClassOne(),false),new PowerClass<ISomePowerClass>(new SomePowerClassTwo(),false)
    };
        
    public PowerClass<ISomePowerClass> this[int index]
    {
        get => powerClasses[index];
        set => powerClasses[index] = value;
    }
       
    public class PowerClass<T> where T : class
    {
        public bool I_Have;
        public T Power;

        public PowerClass(T _Power,bool _Active)
        {
            Power = _Power;
            I_Have = _Active;
        }
    }
}

添加接口 ISomePowerClass 并将 SomePowerClassOne,SomePowerClassTwo 更改为:

public interface ISomePowerClass
{
    void Print();
}
public class SomePowerClassOne : ISomePowerClass
{
    public void Print()
    {
       Console.WriteLine("This is the power one");
    }
}

public class SomePowerClassTwo : ISomePowerClass
{
    public void Print()
    {
       Console.WriteLine("This is the power two");
    }
}

现在使用

ListOfPowerClass PowerList = new ListOfPowerClass();
PowerList[0].Power.Print(); ///index = 0,I will access class PowerOne 
PowerList[1].Power.Print(); ///index = 1,I will access class PowerTwo
本文链接:https://www.f2er.com/1000.html

大家都在问