2013-05-09 5 views
0

Это довольно новичок вопрос, но я в тупике, и я не могу понять, как получить то, что я хочу от этого. У меня есть мой первый класс, который получает информацию (database/textfile/whatever), но я хочу, чтобы он передавал эту информацию в Class2.Два взаимодействующих класса C#

Например, первый:

public class Class1 
{ 
    private int first; 
    private string firstString; 
    private bool isTrue; 

    public void SomeMethod() 
    { 
     first = 1; 
     firstString = "FirstString"; 
     isTrue = true; 
    } 
} 

Здесь SomeMethod устанавливает все атрибуты, которые мне нужно пройти в Class2.

ClassTwo выглядит

public class Class2 
{ 
    private int first; 
    private string FirstString; 
    private bool isTrue; 

    private int second; 
    private string SecondString; 
    private bool isFalse; 

    public void SomeOtherMethod() 
    { 

    } 
} 

Вот что я хочу для SomeOtherMethod(), чтобы установить первый набор атрибутов со значениями, которые были установлены в Class1-х SomeMethod(). Чтобы я мог создать объект типа Class2 и добавить к нему то, что я хочу.

+3

Почему '' Class2' * не содержит * 'Class1', а не пересказывает все его свойства? У вас есть причина? В противном случае, похоже, вы должны смотреть на [композицию] (http://en.wikipedia.org/wiki/Composition_over_inheritance). –

+0

Я думаю, что вам нужно «Список ' в 'Class2' вместо повторения всех полей *, которые много раз *. –

+0

Вопрос неясен, но он может просто хотеть адаптера. –

ответ

3

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

public class Class1 
{ 
    private int _myInt; 
    private string _myString; 
    private bool _myBool; 

    public void SomeMethod() 
    { 
     _myInt = 1; 
     _myString = "FirstString"; 
     _myBool = true; 
    } 
} 

public Class2 
{ 
    private Class1 _first = new Class1(); 
    private Class1 _second = new Class1(); 

    public void SetFirst(Class1 obj) 
    { 
     _first = obj; 
    } 
} 

, а затем использовать классы, как это:

Class1 c1 = new Class1(); 
Class2 c2 = new Class2(); 

c1.SomeMethod(); 
c2.SetFirst(c1); 
+0

Так просто. Спасибо, я думаю, что мой мозг блокирует, это именно то, что мне нужно! –

+0

добро пожаловать.Я также страдаю от блокировки мозга: – jltrem

0

Вы должны определить get accessors для свойств Class1, потому что все они недостижимы вне класса и Класс2 должен использовать свои значения. Определение открытых свойств с ПОЛУЧИТЬ аксессор может быть полезно:

private int first; 
public int First 
{ 
    get 
    { 
     return first; 
    } 
} 

Имея каждое свойство в Class1 определена, как это, вы можете получить доступ к значениям. После вызова SomeMethod, свойства двух объектов могут быть уравнены в двух простых способов (Смотри также: Signatures and overloading):

public void SomeOtherMethod() 
{ 
    Class1 tempClass = new Class1(); 
    tempClass.SomeMethod(); 

    this.first = tempClass.first; 
    this.FirstString = tempClass.firstString; 
    this.isTrue = tempClass.isTrue; 
} 

public void SomeOtherMethod(Class1 myClass) // Overloaded method 
{ 
    this.first = myClass.first; 
    this.FirstString = myClass.firstString; 
    this.isTrue = myClass.isTrue; 
} 

Несмотря на то, что методы выше, кажется, хотели быть то, что вы просили, лучше всего инициализировать класса свойства с использованием constructors. Таким образом, вам не нужно вызывать SomeMethod каждый раз, когда вы создаете объект Class1, и вы также можете устанавливать его значения по умолчанию всякий раз, когда создается новый. Кроме того, предоставление более общих имен свойствам избавит вас от дубликатов. Я пишу код, чтобы предоставить вам понятный синтаксис, который предотвратит будущие проблемы не доступности и повторения.

public class Class1 
{ 
    private int number; 
    public int Number 
    { 
     get { return number; } 
    } 

    private string name; 
    public string Name 
    { 
     get { return name; } 
    } 

    private bool isTrue; 
    public bool IsTrue 
    { 
     get { return isTrue; } 
    } 

    public Class1() 
    { 
     number = 1; 
     name = "FirstString"; 
     isTrue = true; 
    } 

    public Class1(int value1, string value2, bool value3) 
    { 
     number = value1; 
     name = value2; 
     isTrue = value3; 
    } 
} 

public class Class2 
{ 
    private Class1 firstClass; 
    private Class1 secondClass; 

    public Class2() 
    { 
     firstClass = new Class1(); 
     secondClass = new Class1(2, "SecondString", false); 
    } 
} 

Если вы собираетесь определить множество объектов class1 в Class2, то решение, такие как массив или список становится обязательным. Я приведу короткий пример, см. MSDN List page.

private List<Class1> class1List = new List<Class1>(); 
class1List.Add(new Class1()); 
class1List.Add(new Class1(2, "SecondString", false)); 
Смежные вопросы