0

私は C# とプログラミング全般に非常に慣れていないため、個別の .cs ファイルの変数と定数を使用する際に問題が発生しています。以前にこの質問をして、いくつかの回答を得ましたが、実際に私の質問に答えた回答がなかったため、間違って質問したと思います。良い答えです。質問を間違って提示しただけだと思います。では、また行きます。

Common.cs というファイルで決して変更されない定数のリストを含むクラスがあり、これらの定数は Weapons.cs ファイルなどの他のファイルで参照する必要があります。私が直面している問題は、定数/変数が「現在のコンテキストに存在しない」というエラーが常に発生することです。私が間違っていることや欠けていることはわかりませんが、それは単純なことだと確信しています。これまでの私のコードの例は次のとおりです。

定数を含むクラスは次のとおりです。

namespace MechLab
{
    public static class Common
    {
        public const int NUMBER_OF_EQUIPABLE_SECTIONS = 6;
        public const int NUMBER_OF_CRITICAL_SECTIONS = 8;
        public const int NUMBER_OF_SECTIONS = 11;
        public const int UNKNOWN_LOCATION = -1;
        public const int RIGHT_ARM = 0;
        public const int LEFT_ARM = 1;
        public const int RIGHT_TORSO = 2;
        public const int LEFT_TORSO = 3;
        public const int CENTER_TORSO = 4;
        public const int HEAD = 5;
        public const int RIGHT_LEG = 6;
        public const int LEFT_LEG = 7;
        public const int RIGHT_REAR_TORSO = 8;
        public const int LEFT_REAR_TORSO = 9;
        public const int CENTER_REAR_TORSO = 10;
        public const int BOTH_SIDE_TORSOS = 11;
        public const int BOTH_ARMS = 12;

        public const int NUMBER_OF_HARDPOINT_TYPES = 4;
        public const int BALLISTIC = 0;
        public const int ENERGY = 1;
        public const int MISSILE = 2;
        public const int AMS = 3;
        public const int OMNI = 4;

        public const int AMMO = 3;
        public const int OTHER = 4;
        public const int SELECTED = 5;

        public const double SRM_DAMAGE = 2.5;
        public const double LRM_DAMAGE = 1.8;
        public const double SRM_RECYCLE = 3.5;
        public const double LRM_RECYCLE = 3.25;
        public const double SRM_DELAY = 0.25;
        public const double LRM_DELAY = 0.5;
        public const double LRM_IMPULSE = 0.8;
        public const int SRM_RANGE = 270;
        public const int MRM_RANGE = 450;
        public const int LRM_MIN_RANGE = 180;
        public const int ENHANCED_LRM_MIN_RANGE = 90;
        public const int LRM_RANGE = 630;
        public const int LRM_MAX_RANGE = 1000;
        public const int EXTENDED_LRM_MIN_RANGE = 300;
        public const int EXTENDED_LRM_RANGE = 1140;
        public const int EXTENDED_LRM_MAX_RANGE = 1140;
        public const int SRM_SPEED = 300;
        public const int STREAK_SRM_SPEED = 200;
        public const int LRM_SPEED = 100;

        public const int ARTEMIS_CRITICALS = 1;
        public const int ARTEMIS_COST = 1;
        public const double ARTEMIS_TONNAGE = 1.0;

        public const int LASER_RANGE_MOD = 2;
        public const int PROJECTILE_RANGE_MOD = 3;

        public const int INTERNALS = 0;
        public const int ARMOR = 1;
        public const int INTERNALS_TOTAL = 8;
        public const int ARMOR_TOTAL = 8;

        public const int NUMBER_OF_MAIN_SECTION = 6;
        public const int NUMBER_OF_LESSER_SECTION = 3;
        public const int NUMBER_OF_MAIN_SECTION_CRITICALS = 12;
        public const int NUMBER_OF_LESSER_SECTION_CRITICALS = 6;

        public const int BALLISTIC_MAX_RANGE_MOD = 3;
        public const int ENERGY_MAX_RANGE_MOD = 2;

        public const int LOWER_ARM_ACTUATOR = 0;
        public const int HAND_ACTUATOR = 1;

        public const int UNKNOWN_ITEM_TYPE = 0;
        public const int COMPONENT_ITEM_TYPE = 1;
        public const int WEAPON_ITEM_TYPE = 2;
        public const int AMMO_ITEM_TYPE = 3;
        public const int EQUIPMENT_ITEM_TYPE = 4;
        public const int HEAT_SINK_ITEM_TYPE = 5;
        public const int JUMP_JET_ITEM_TYPE = 6;
        public const int ARMOR_ITEM_TYPE = 7;
        public const int INTERNAL_ITEM_TYPE = 8;
        public const int CASE_ITEM_TYPE = 9;
        public const int ENGINE_ITEM_TYPE = 10;
        public const int OTHER_ITEM_TYPE = 11;

        public const int TORSO = 0;
        public const int ARM = 1;
        public const int NUMBER_OF_MOVING_SECTIONS = 2;
        public const int YAW = 0;
        public const int PITCH = 1;
        public const int AXIS_OF_MOVEMENT = 2;

        public const double DOUBLE_HEAT_SINK_DISSIPATION = 1.4;
    }
}

ここに私の Weapons.cs があります:

namespace MechLab
{
    public class Weapons
    {
        public int tons;
        public int heat;
        public int crits;
        public int minRange;
        public int maxRange;
        public int effectiveRange;
        public string hardpointType;
        public bool artemisCapable;
        public int ammoCount;
        public double damage;
        public double knock;
        public string weaponName;
        public int cost;
        public string equipmentName;
        public string shortName;

        void AC10()
        {
            equipmentName = "Autocannon 10";
            shortName = "AC10";
            crits = 7;
            cost = 400000;
            hardpointType = BALLISTIC;
            minRange = 0;
            maxRange = effectiveRange * PROJECTILE_RANGE_MOD;
            effectiveRange = 450;

        }
    }
}

何も問題はないと思いますが、コーディングに本当に慣れていないので、かなり明白な何かが欠けていると確信しています.

4

2 に答える 2

6

定数はCommonクラスにあるため、クラスから参照するときにクラス名を含める必要がありますWeapon

void AC10()
{
    equipmentName = "Autocannon 10";
    shortName = "AC10";
    crits = 7;
    cost = 400000;
    hardpointType = Common.BALLISTIC;
    minRange = 0;
    maxRange = effectiveRange * Common.PROJECTILE_RANGE_MOD;
    effectiveRange = 450;
}

アップデート:

他の人が言っているように、定数の一部 (実際には値を必要としない「型」定数) はenum、マルコの回答のように s の方が良いかもしれません。それらはコンパイル時に割り当てられた値を取得しますが、それらを知る必要はありません。

値を使用する定数がある場合、そのままにしておきます。また、それらを異なるクラスにグループ化します。現在、独自のクラスに移動できる空白で区切られている、根本的に異なる定数のセットがいくつかあるようです。わかりやすいクラス名を付けることで、コードの読みやすさと理解力が向上します。

于 2013-04-11T14:10:07.933 に答える
1

一部の定数については、それらを列挙型にグループ化することをお勧めします。これにより、コードの可読性が向上します

例えば:

public enum Location
{
    UNKNOWN,
    RIGHT_ARM,
    LEFT_ARM,
    RIGHT_TORSO,
    LEFT_TORSO,
    CENTER_TORSO,
    [...]
}

public enum HardpointType
{
    BALLISTIC,
    ENERGY,
    MISSILE,
    AMS,
    OMNI
}

これは、私が検討するので、後で非常に役立つことが証明されます

MountWeapon(Location.RIGHT_ARM, HardpointType.BALLISTIC);

よりも理解しやすい

MountWeapon(1, 0);
于 2013-04-11T14:47:34.810 に答える