我知道这个问题可能是无稽之谈,但我已经考虑了一段时间。我正在开发一个Xamarin Forms应用程序,它可以在Windows和Android上运行,而且它们共享大部分代码。但是,由于某些原因,有一个特定的页面需要特定于平台(因为UI元素的分布使应用程序看起来很奇怪)。随着代码行数的增加,并且它们几乎相同,我想到了创建一个单独的脚本来处理两个页面的逻辑,并且我只需从每个页面调用这些新方法。(我以前为每个UI元素创建了一些getter),由于每个页面都有不同的类名,比如说Page1和Page2,有没有什么方法可以在运行时设置,根据应用程序运行的平台,可以采用Page1或Page2类型的通用变量?
"我的努力"
我尝试过使用共享项目和编译指令
#if WINDOWS_UWP
...
#elif ANDROID
...
#endif
但我不知道是我不知道如何正确地使用它,还是它根本不起作用。在编译时,它说这个泛型变量没有属于Page1和Page2类的任何变量的定义。
"我的目标就是拥有这样的东西"
class Page1{
int SameVariableName;
}
class Page2{
int SameVariableName
}
class GenericClass{
//Check if Platform is Windows or Android
if (Windows) { Page1 pageVariable = new Page1();}
else if (Android) { Page2 pageVariable = new Page2();}
pageVariable.SameVariableName = (...);
}
问题在于,由于pageVariable赋值直到运行时才完成,因此会产生大量编译错误,例如pageVariable不包含SameVariableName的定义
非常感谢提前阅读这篇文章并试图帮助我
2条答案
按热度按时间ddrv8njm1#
看起来你应该用相反的方法来做这件事。因为大多数代码是完全相同的,所以应该有一个Page类。
然后,您可以将Page1或Page2实际转换为Page类,这样您的泛型类就只处理Page类,而不必处理Page1或Page2。您可以继续执行代码,然后如果需要将它们发送回来,则转换为其他方式。
但是老实说,你要做的事情就是学习和使用C#接口,使用接口你可以创建一个父类来策略性地处理两个子类,这样问题在成为实际问题之前就已经解决了。你会有一个Page类,Page1和Page2都继承自Page类。你的编译器不会抱怨这种方式。
p5cysglq2#
如果您有共用程式码,请从BasePage类别取得Page1和Page2
inherit
。通过定义
abstract
(或virtual
,如果需要“基本”定义)方法和属性,并在Page1和Page2中实现这些方法和属性,可以实现这些差异。如果没有共享的实现代码,BasePage可以是
interface
。按照惯例,有些名字以
I
开头: