Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xamarin中的拆分类定义_C#_Class_Xamarin_Definition - Fatal编程技术网

C# Xamarin中的拆分类定义

C# Xamarin中的拆分类定义,c#,class,xamarin,definition,C#,Class,Xamarin,Definition,我正在xamarin中开发一个跨平台应用程序。我想在我的共享库中定义多个类,然后为每个平台使用特定于平台的代码来实现它们。这些类将在我的主视图模型中引用,以控制不同的功能(例如电池电量、wifi、usb摄像头)。做这件事最好的方法是什么?在Xamarin中,您可以利用接口来完成这项工作。在C#中,使用接口定义了任何实现它的类都必须满足的契约 使用您的示例,假设您的共享文件夹中有一个名为IBatteryService的接口 public interface IBatteryService {

我正在xamarin中开发一个跨平台应用程序。我想在我的共享库中定义多个类,然后为每个平台使用特定于平台的代码来实现它们。这些类将在我的主视图模型中引用,以控制不同的功能(例如电池电量、wifi、usb摄像头)。做这件事最好的方法是什么?

在Xamarin中,您可以利用接口来完成这项工作。在C#中,使用接口定义了任何实现它的类都必须满足的契约

使用您的示例,假设您的共享文件夹中有一个名为
IBatteryService
的接口

public interface IBatteryService
{
     double GetBatteryLevel();
}
在每个平台项目中,您将有三个此接口的实现:iOS、Android和UWP。这些实现将具有特定于平台的代码,以获得所需的内容

public class BatteryServiceIOS : IBatteryService
{
    public double GetBatteryLevel()
    {
        ///
        /// iOS code to get the device battery level
        ///

        return batteryLevel;
    }
}
您的ViewModels将使用界面,使代码与正在使用的实现无关

public class HomeViewModel
{
    IBatteryService _batteryLevel;

    public HomeViewModel()
    {
        //You will initialize your instance either using DI (Dependency Injection or by using ServiceLocator.
    }

    public double GetDeviceBatteryLevel()
    {
         // At this moment the VM doesn't know which implementation is used and it actually doesn't care.
         return _batteryLevel.GetBatteryLevel();
    }
}
在应用程序合成根目录中,在iOC的帮助下,将定义要使用的实现。每个平台都将注册自己的实现。然后在ViewModels中,您将使用ServiceLocator注入或获取已注册的实现

一般来说,这就是Xamarin插件的工作方式。您可以在github中查看插件代码

这里有一个很好的教程,它详细解释了

希望这足够清楚