gpt4 book ai didi

c# - 动态创建静态字段 C#?

转载 作者:行者123 更新时间:2023-11-30 16:37:26 28 4
gpt4 key购买 nike

是否可以在类中动态创建静态字段?

class Pages
{
private static T getPages<T>() where T : new()
{
var page = new T();
PageFactory.InitElements(Browsers.getDriver, page);
return page;
}
public static HomePage Home => getPages<HomePage>();
public static DashboardPage Dashboard => getPages<DashboardPage>();
public static ProfilePage Profile => getPages<ProfilePage>();
}

现在我自己一个一个添加。有没有办法动态添加它们? HomePageDashboardPageProfilePage 位于 MyProject.Pages 命名空间下,如果我知道如何动态创建静态字段,我可以遍历该命名空间并动态创建它们。

最佳答案

你问的是不可能的,因为编译后的代码取决于编译它的源代码。因此,除非您动态生成源代码(您可以为此研究 T4T5),否则无法按照您描述的方式扩展已编译的类。

然而,通过稍微不同的设置,对所有这些的需求可能会变得很小,甚至不需要。通过制作类Pages静态,然后按如下方式使用它:using static <namespace>.Pages ,您可以使用它的方法而无需在类名前加上前缀。

完整示例(以及随附的 .NET Fiddle ):

using System;
using Project;
using static Project.Pages;

public class Program
{
public static void Main()
{
var home = GetPage<Home>();
var dashboard = GetPage<Dashboard>();
var profile = GetPage<Profile>();

Console.WriteLine(home.GetType().Name);
Console.WriteLine(dashboard.GetType().Name);
Console.WriteLine(profile.GetType().Name);
}
}

namespace Project
{
public static class Pages
{
public static T GetPage<T>() where T : new()
{
var page = new T();
// ...
return page;
}
}

public class Home { /* ... */ }

public class Dashboard { /* ... */ }

public class Profile { /* ... */ }
}

然后您可以通过使所有 Page 类实现 IPage 来使其更安全。接口(interface),并添加一个where T: IPage约束到 GetPage<T>() .

关于c# - 动态创建静态字段 C#?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58283268/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com