В ваш класс WantsByte
вы пытаетесь инициализировать элемент theInstance
через другого нестатического элемента address
, а компилятор должен быть жалован на Error CS0236. Вы можете перемещать theInstance
инициализации в конструкторе:
class WantsByte
{
IPAddress address = IPAddress.Parse("192.168.1.1");
HasByte theInstance;
public WantsByte()
{
theInstance = new HasByte(this.address);
}
}
Демонстрационный пример:
using System;
using System.Net;
using System.Linq;
public class Program
{
public static void Main()
{
var wants = new WantsByte();
}
}
class HasByte
{
public byte[] theByteArray = new byte[4];
public HasByte(IPAddress someAddress)
{
theByteArray = someAddress.GetAddressBytes();
}
}
class WantsByte
{
IPAddress address = IPAddress.Parse("192.168.1.1");
HasByte theInstance;
public WantsByte()
{
theInstance = new HasByte(this.address);
// do something with theInstance.theByteArray[2] for example
// Let's print all elements of the array
Console.WriteLine(String.Join(",", theInstance.theByteArray.Select(o => o.ToString()).ToArray()));
}
}
дает выход:
192,168,1,1
В качестве альтернативы, в классе WantsByte
, вы можете сделать address
быть static
членом который гарантирует, что он будет инициализирован перед первым использованием класса. Вы можете ссылаться на него в theInstance
инициализаторе:
using System;
using System.Net;
using System.Linq;
public class Program
{
public static void Main()
{
var wants = new WantsByte();
wants.DoSomethingWithHasByte();
}
}
class HasByte
{
public byte[] theByteArray = new byte[4];
public HasByte(IPAddress someAddress)
{
theByteArray = someAddress.GetAddressBytes();
}
}
class WantsByte
{
static IPAddress address = IPAddress.Parse("192.168.1.1");
HasByte theInstance = new HasByte(WantsByte.address);
public void DoSomethingWithHasByte()
{
Console.WriteLine(String.Join(",", theInstance.theByteArray.Select(o => o.ToString()).ToArray()));
}
}
также дает тот же результат:
192,168,1,1
Это плохая практика, чтобы объявить член класса общедоступных, лучше инкапсулировать его как свойство с Get/Set согласно к вашим потребностям. Что касается вашей проблемы, работает ли конструктор так, как должен? Вы пытались его отладить? –
@FelixAv Мне еще предстоит узнать о get/set, но я рассмотрю это. Конструктор работает, и в фактическом коде есть больше публичных переменных, к которым я могу получить доступ, и они сохраняют свои значения. Это просто проблема с массивом. – RuvenS
Вы уверены, что разместили правильный код; Ваш код не будет компилироваться, так как 'theInstance' инициализируется нестационарным' адресом'. Может быть, WantsByte - это метод, а не класс? – jHilscher