2016-07-08 7 views
0

, поэтому я медленно читаю книгу «Руководство для игроков C#, второе издание». и я получил возможность попробовать! деятельность с участием классов. Он говорит мне создать класс Color с геттерами и сеттерами для красного, синего, зеленого и альфа, которые я сделал.Использование класса внутри других классов Constructor, C#

Он также сказал мне сделать класс шара, который потребует размер, цвет (используя класс цвета) и timesThrown переменные. Я сделал это хорошо, и теперь я вернулся в основной класс программы, создавая экземпляры класса ball.

Действительно я просто интересуюсь тем, что лучше сделать для создания этого шара, потому что один способ выглядит более эффективным, но тогда я не уверен, как использовать геттеры и сеттеры класса Color, а другой образ менее эффективен, но позволяет мне использовать все это. И, не имея возможности использовать методы в классе, я не понимаю, почему я бы не просто определял цвета в классе Ball в любом случае, если только для того, чтобы узнать о классах и как их сделать, в этом руководстве было я так делаю?

Так как я лично сделал это первым, который позволил мне использовать все методы в классе Color было так:

Color red_color = new Color(255, 0, 0); 
Ball red_ball = new Ball(5, red_color); 

потому, что позволяет мне делать red_color.GetRed(); например.

Другой способ заключается в следующем:

Ball blue_ball = new Ball(4, new Color(0, 0, 255)); 

Однако, когда я делаю это так, как я должен использовать методы, определенные в классе Color? Мой первый инстинкт состоял в том, чтобы использовать Static, поскольку я не делаю экземпляр, но, очевидно, например, красный, не всегда будет одинаковым значением для каждого шара, чтобы он не работал.

Так что, второй подход позволяет мне использовать методы Colors вообще? Извиняюсь, если я плохо сформулировал себя.

+0

Почему красный не всегда будет одинаковым для каждого шара? код должен быть таким же, не так ли? –

+0

Я в замешательстве - вы говорите, что хотите использовать цвет, переданный конструктору 'Ball' _outside_ этого класса? Затем либо выставляем цвет как свойство 'Ball', либо используйте локальную переменную. Если вы хотите использовать его _inside_ класс 'Ball', тогда покажите, что вы хотите делать, но не можете. –

+0

Также учебные пособия не _perfect_ - они предназначены для того, чтобы дать вам понимание конкретных концепций и могут быть не хорошими проектами _real-world_. Возможно, учебник _later_ разоблачил цвет как свойство, и вы еще не получили его? –

ответ

0

Мой первый инстинкт должен был использовать Static, как я не делаю Экземпляр

Ну вы делаете экземпляр. Каждый раз, когда вы видите новое ключевое слово, это новый экземпляр. У вас просто нет ссылки на нее, поскольку вы передали ее непосредственно конструктору:

новый Ball (4, новый цвет (0, 0, 255));

Если у вас есть public BallColor Color { set; get; } внутри Ball класса, то цвет доступен через Ball объекта, как это:

red_ball.BallColor.Something

Так что, если вам просто нужно Color объект передать его в конструктор Ball , используйте второй метод. Если вам нужна ссылка на Color, чтобы читать/записывать данные в/из этого объекта в следующем коде в вашей программе, используйте первый подход.

Здесь нет правила, оно основано на следующем коде и на использовании. Поэтому вам необходимо спросить себя:

Нужно ли сохранять ссылку на объект Color вне объекта Ball?

0

В мяч классе можно добавить свойство цвета, как этот

Color BallColor {get;private set;} 

и в конструкторе, вы должны установить цвет шарика вы хотите

Ball blue_ball = new Ball(4, new Color(0, 0, 255)); 

и вы можете использовать цветные методы, подобные этому

blue_ball.BallColor.GetRed(); 
0

Если единственное место, где вам нужно вмешаться ct с этим экземпляром Color находится внутри этого экземпляра Ball, сделайте это вторым способом.

Однако, если вам нужно будет взаимодействовать с этим экземпляром Color где-нибудь еще, сделайте это первым способом. Например, если вы создаете четыре красных Ball с в ряд, создайте один красный Color экземпляр и передать его каждому из них:

var balls = new List<Ball>(); 
var red = new Color(255, 0, 0); 

for (int i = 0; i < 4; ++i) { 
    balls.Add(new Ball(4, red)); 
} 

Иногда один подходит, иногда другой. Ни один из них не является абсолютно «лучшим»; делайте то, что работает в конкретном случае, который у вас есть перед вами. Иногда вы можете создать локальную переменную, чтобы облегчить читаемость.

См. Также ответ @ ShlomiHaver.

0

Вы, безусловно, можете это сделать, но помните, что контекст экземпляра объекта всегда является самым важным.

Вы хотите знать цвет мяча, не так ли? Поэтому добавьте подходящий метод для класса Ball.

public class Ball 
{ 
    private int Size { get; set; } 
    private Color BallColor { get; set;} 

    Ball(int size, Color color) 
    { 
     Size = size; 
     BallColor = color; 
    } 

    public Color GetBallColor() 
    { 
     return BallColor; 
    } 
} 

Затем вы можете использовать цвет шара, как это:

var ball = new Ball(5, new Color(0, 0, 0)); 
var ballColor = ball.GetBallColor(); 
var ballColorRedValue = ballColor.GetRed(); 

Достижение же самое, используя свойства абсолютно приемлемо.

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