.NET Fiddle

CSharp · Console

/Program.cs

using System;

namespace ConsoleApplication1
{
    public class Program
    {
        public static void Main()
        {
            RocketsAmmo foo = RocketsAmmo.CreateRocketsAmmo(RocketAmmoType.NV);
            RocketsAmmo bar = RocketsAmmo.CreateRocketsAmmoNV();
            RocketsAmmoLV baz = RocketsAmmo.CreateRocketsAmmoLV();
        }

        public enum RocketAmmoType
        {
            NV,
            LV
        }

        public abstract class RocketsAmmo
        {
            public int CountInBlock { get; }
            public int Damage { get; }
            public RocketAmmoType RocketAmmoType { get; }

            protected RocketsAmmo(RocketAmmoType rocketAmmoType, int damage, int countInBlock)
            {
                RocketAmmoType = rocketAmmoType;
                Damage = damage;
                CountInBlock = countInBlock;
            }

            //Оригинальная концепция шаблона "Фабричный метод" предлагает вынести всё это говно в класс RocketsAmmoFactory, 
            //но оно будет работать и так

            //Один вариант. Получишь нужного потомка в зависимости от параметра
            public static RocketsAmmo CreateRocketsAmmo(RocketAmmoType rocketAmmoType)
            {
                if (rocketAmmoType == RocketAmmoType.NV)
                    return new RocketsAmmoNV(RocketAmmoType.NV, 20, 1);

                if (rocketAmmoType == RocketAmmoType.LV)
                    return new RocketsAmmoLV(RocketAmmoType.LV, 10, 1);

                throw new ArgumentException("Cannot create RocketsAmmo");
            }

            //Другой вариант, без передачи параметра
            public static RocketsAmmo CreateRocketsAmmoNV()
            {
                return new RocketsAmmoNV(RocketAmmoType.NV, 20, 1);
            }

            //В этом случае получишь конкретного потомка, а не абстрактный RocketsAmmo
            public static RocketsAmmoLV CreateRocketsAmmoLV()
            {
                return new RocketsAmmoLV(RocketAmmoType.LV, 10, 1);
            }
        }

        public class RocketsAmmoNV : RocketsAmmo
        {
            public RocketsAmmoNV(RocketAmmoType rocketAmmoType, int damage, int countInBlock) : base(rocketAmmoType, damage, countInBlock)
            {

            }
        }

        public class RocketsAmmoLV : RocketsAmmo
        {
            public RocketsAmmoLV(RocketAmmoType rocketAmmoType, int damage, int countInBlock) : base(rocketAmmoType, damage, countInBlock)
            {

            }
        }
    }
}
;