2016-03-13 2 views
0

У меня есть 2 класса, которые содержат некоторую информацию о пользователе. Один хранит данные, другой содержит информацию о контроле. Теперь мне нужно передать оба из них в качестве параметров метода. Однако они связаны друг с другом, и я не думаю, что передача двух классов отдельно в качестве параметров в порядке. Интересно, стоит ли мне помещать их в Tuple или что-то, что держит их вместе, поэтому я могу передать их как один параметр любому методу. Вот как они выглядят:C# Пропустить несколько классов как один параметр

Класс данных:

public class UsersProperties 
{ 
    public enum CUser 
    { 
     Player, 
     Bot1, 
     Bot2, 
     Bot3, 
     Bot4, 
     Bot5 
    } 

    public int RightCard { get; set; } 
    public string Name { get; set; } 
    public int? Chips { get; set; } 
    public int Type { get; set; } 
    public bool Turn { get; set; } 
    public bool FoldTurn { get; set; } 
    public int PreviousCall { get; set; } 
    public int LeftCard { get; set; } 
    public double Power { get; set; } 
    public int EnumCasted { get; set; } 
} 

Средства управления классом:

public class UserControls 
{ 
    public Point CardsLocation { get; set; } 
    public AnchorStyles CardsAnchor { get; set; } 

    public Panel Panel { get; } = new Panel(); 
    public Point PanelLocation { get; set; } 
    public Size PanelSize { get; } = new Size((Settings.Width + 10) * 2, Settings.Height + 20); 
    public int IndentationPanelXy { get; } = 10; 

    public Label UsernameLabel { get; set; } = new Label(); 
    public Point UsernameLabelLocation { get; set; } 
    public Size UsernameLabelSize { get; } = new Size(Settings.Width * 2, 20); 

    public TextBox ChipsTextBox { get; set; } = new TextBox(); 
    public Label StatusLabel { get; set; } = new Label(); 

    public UserControls(AnchorStyles style, Point cardsLocation, bool down) 
    { 
     CardsAnchor = style; 
     CardsLocation = cardsLocation; 
     UsernameLabelLocation = down ? new Point(CardsLocation.X, CardsLocation.Y - 20) : new Point(CardsLocation.X, CardsLocation.Y + Settings.Height); 
     PanelLocation = new Point(CardsLocation.X - IndentationPanelXy, CardsLocation.Y - IndentationPanelXy); 
    } 
} 

Теперь вот как я их инициализации:

private static Player Player = new Player(Properties.Settings.Default.StartingChips); 

private UserControls PlayerControls = new UserControls(AnchorStyles.Bottom, new Point(560, 470),false); 

И вот способ, в котором я должен передать оба из них:

 private void SetPlayers(UsersProperties user, UserControls userControls, int turn, ref bool check, Image refreshbackImage) 
    { 
     if (user.Chips <= 0) return; 
     _foldedPlayers--; 
     if (turn < user.RightCard || turn > user.LeftCard) return; 
     if (Holder[user.RightCard].Tag != null) 
     { 
      Holder[user.LeftCard].Tag = _reserve[user.LeftCard]; 
     } 
     Holder[user.RightCard].Tag = _reserve[user.RightCard]; 
     if (!check) 
     { 
      _horizontal = userControls.CardsLocation.X; 
      _vertical = userControls.CardsLocation.Y; 
     } 
     check = true; 
     Holder[turn].Anchor = userControls.CardsAnchor; 
     Holder[turn].Image = refreshbackImage; 
     if (turn < Bot1.RightCard) 
     { 
      Holder[turn].Image = Deck[_i]; 
     } 
     Holder[turn].Location = new Point(_horizontal, _vertical); 
     _horizontal += Holder[turn].Width; 
     Holder[turn].Visible = true; 
     Controls.Add(userControls.Panel); 
     userControls.Panel.Location = userControls.PanelLocation; 
     userControls.Panel.BackColor = Color.DarkBlue; 
     userControls.Panel.Size = userControls.PanelSize; 
     userControls.Panel.Visible = false; 
     if (_i != user.LeftCard) return; 
     check = false; 
    } 

Я хочу знать, есть ли лучший способ пройти 2 классов в качестве параметров я думаю, что они должны держаться вместе в любом случае.

+0

Если вы хотите поместить их в класс контейнера, сделайте это. Но нет ничего, что говорит, что вы не должны просто давать два объекта в качестве параметров. Помещение их в кортеж просто усложнило бы и ничего не даст вам –

ответ

0

Вы можете написать класс оболочки (то есть: UserContainer), который имеет два свойства: usercontrol и userproperty. Затем инициализируйте его и передайте этот класс в качестве параметра.

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