Implementing LibGDX Camera and Viewport in MonoGame

Hello, I recently migrated from LibGDX to MonoGame, and since I’m very comfortable working with LibGDX, I’ve decided to port the functionality of some of its objects. So far, I’ve done this with OrthographicCamera, ExtendViewport, and FitViewport. They’re not complete yet, but they have what I need for my game, at least for now. The thing is, as I mentioned, I’m new to MonoGame and C#. I would like to share my code and have the community help me optimize and correct it if necessary. Thanks in advance.

// Class CViewport is the foundation of the other Viewports:
using com.fantasy.game.engine.core;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace com.fantasy.game.engine.graphics
{
    public class CViewport
    {
        public Viewport viewport;
        public int VirtualHeight;
        public int VirtualWidth;
        public int ScreenWidth { get { return Engine.GetInstance().Game.GraphicsDevice.PresentationParameters.BackBufferWidth; } private set { } }
        public int ScreenHeight { get { return Engine.GetInstance().Game.GraphicsDevice.PresentationParameters.BackBufferHeight; } private set { } }
        public Game Game { get { return Engine.GetInstance().Game; } private set { } }

        public virtual void Initialize() { }
    }
}
// Class ExtendViewport:
using Microsoft.Xna.Framework;

namespace com.fantasy.game.engine.graphics
{
    public class ExtendViewport : CViewport
    {
        public ExtendViewport(int viewportHeight)
        {
            VirtualHeight = viewportHeight;
        }
        public override void Initialize()
        {
            var targetAspectRatio = (float)ScreenWidth / (float)ScreenHeight;
            VirtualWidth = (int)(VirtualHeight * targetAspectRatio);

            viewport = new Microsoft.Xna.Framework.Graphics.Viewport()
            {
                X = 0,
                Y = 0,
                Width = ScreenWidth,
                Height = ScreenHeight
            };

            Game.GraphicsDevice.Viewport = viewport;
        }
    }
}
// Class FitViewport:
using com.fantasy.game.engine.core;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using System;

namespace com.fantasy.game.engine.graphics
{
    public class FitViewport : CViewport
    {
        public Color BackgroundColor = Color.Orange;

        public FitViewport(int viewportWidth, int viewportHeight)
        {
            VirtualWidth = viewportWidth;
            VirtualHeight = viewportHeight;
        }

        public override void Initialize()
        {
            SetupFullViewport();
            Game.GraphicsDevice.Clear(BackgroundColor);
            SetupVirtualViewport();
        }

        public void SetupFullViewport()
        {
            var vp = new Viewport();
            vp.X = vp.Y = 0;
            vp.Width = ScreenWidth;
            vp.Height = ScreenHeight;
            Game.GraphicsDevice.Viewport = vp;
        }

        public void SetupVirtualViewport()
        {
            var targetAspectRatio = VirtualWidth / (float)VirtualHeight;
            var width = ScreenWidth;
            var height = (int)(width / targetAspectRatio + .5f);

            if (height > ScreenHeight)
            {
                height = ScreenHeight;
                width = (int)(height * targetAspectRatio + .5f);
            }

            viewport = new Viewport
            {
                X = (ScreenWidth / 2) - (width / 2),
                Y = (ScreenHeight / 2) - (height / 2),
                Width = width,
                Height = height
            };

            Game.GraphicsDevice.Viewport = viewport;
        }
    }
}
// Class OrthographicCamera:
using Microsoft.Xna.Framework;
using Vector2 = Microsoft.Xna.Framework.Vector2;

namespace com.fantasy.game.engine.graphics
{
    public class OrthographicCamera
    {
        public Vector2 Position;
        float Zoom;
        CViewport viewport;

        public OrthographicCamera(CViewport viewport)
        {
            Position = Vector2.Zero;
            Zoom = 1.0f;
            this.viewport = viewport;
            this.viewport.Initialize();
        }

        public void Translate(float x, float y)
        {
            Position.X += x;
            Position.Y += y;
        }

        public Matrix GetViewMatrix()
        {
            return Matrix.CreateTranslation(-Position.X, -Position.Y, 0) *
                Matrix.CreateScale((float)viewport.viewport.Width / (float)viewport.VirtualWidth, (float)viewport.viewport.Height / (float)viewport.VirtualHeight, 1) *
                Matrix.CreateScale(Zoom);
        }
    }
}

I have translated the post using a translator because my English is very poor. I apologize if there are any errors.