2013-12-02 6 views
0

Я делаю игру на C#, где у вас есть боеприпасы и максимальная вместимость.Можно ли это сделать: MyInt.CustomMethod

Можно ли сделать какой-то метод, как этот

ammoInt.Maxed;

так, что я могу использовать его как это:

if (ammoInt.Maxed == true) etc.

, чтобы проверить, если ammo INT равно maxAmmoInt?

EDIT:

Спасибо за вход, но один последний вопрос: сделать расширение иметь быть в отдельном классе?

+3

Посмотрите на методы расширения –

+0

Да методы расширения должны быть в отдельном классе – albertjan

+0

Хорошо спасибо вам: D – MasterXD

ответ

4

Вы можете создать Extension method для int. Как:

public static class MyExtensions 
{ 
    public static bool Maxed(this int parameter) 
    { 
     return parameter > 100; 
    } 
} 

Тогда вы можете назвать это нравится:

if(ammoInt.Maxed()) 
+0

@JustinPihony, спасибо за редактирование – Habib

1

Технически, да. Методы расширения предоставляют это в .Net. Но это плохой дизайн.

public static class MyExtensions 
{ 
    public static public bool IsMaxed(this int value) 
    { 
     return value > 50; // or whatever 
    } 
} 

int thing = 10; 
bool result = thing.IsMaxed(); 

Это позволяет вам вызвать этот метод для любого объекта int. Но, как я уже сказал, вы должны, вероятно, пересмотреть дизайн этого, так как это взломать.

+0

Почему вы говорите, что это взломать? И класс должен быть также статическим, FYI –

+2

Вы действительно не должны добавлять расширения к примитивным типам. В этом контексте может иметь смысл увидеть, является ли этот int максимальным. Но этот метод не применим ко всем целым целым в проекте. Поэтому в любой случайной точке он мог бы развиваться, иметь целое число и видеть, что у него есть метод IsMaxed. Никакого контекста нет. –

+0

@WilliamCustode у вас есть точка там. –

1

Как я вижу, у вас есть два варианта.

1) Создайте класс-оболочку, которая имеет bool свойство, что проверить, если его значение, если больше 100

public class Ammo 
{ 
    public int Value {get; set;} 
    public bool Maxed 
    { 
     get 
     { 
     return Value > 100; 
     } 
    } 
} 

2) Вы можете создать метод расширения

public static class CustomExtensions 
{ 
    public static bool Maxed(this int value) 
    { 
     return value> 100; 
    } 
} 
+0

Я бы даже не назвал его 'MyAmmoInt', просто назовите его' Ammo'. (Кроме того, это, вероятно, имеет смысл как неизменяемая структура, а не изменчивый класс, даже если сделать его структурой (правильно), чтобы набрать еще немного текста. – Servy

+0

@Servy Я полностью согласен, это было больше для демонстрации того, что это на самом деле простой класс-оболочка. –

+0

Моя точка зрения заключается в том, что вы не должны думать об этом так же, как обертку, но как о представлении «боеприпасов», которое просто не имеет ничего общего с ним. Концептуально это не обертка, это просто все, что нужно знать о боеприпасах. – Servy

Смежные вопросы