Sheepings
Я предлагаю Вам почитать дальше Инициализаторы объектов и коллекций - руководство по программированию на C# | Microsoft Docs[^] Обратите внимание, что в вашем случае ваш :
PostcodeAnywhereBusinessLogic.ValidateBank(sortCode, accountNum);
не существует в том же классе, который вы используете для выполнения вызова.
Вы можете либо сделать объект, который вы вызываете статическим, либо вам нужно будет создать экземпляр нового объекта этого объекта классов, выполнив что-то вроде :
PostcodeAnywhereBusinessLogic postcodeAnywhereBusinessLogic = new PostcodeAnywhereBusinessLogic();
И тогда ты сможешь позвонить
postcodeAnywhereBusinessLogic.ValidateBank(sortCode, accountNum);
Ниже приводится грубое небольшое приложение, которое я сделал для вас, чтобы протестировать, отладить и изучить, и читать дальше с этого момента необязательно. Что - то нужно отметить при создании экземпляров объектов и работе со статикой, и я буду использовать интерфейсы в качестве примера здесь.
Если класс, который нуждается в создании экземпляра, ранее имел значения, установленные для указанного объекта из его собственной области видимости или другим классом, и когда вы вызываете new для экземпляра объекта, вы создаете новый объект со всеми его определенными переменными, методами и свойствами также как new. Давай я тебе покажу. Обратите внимание, что в нашем базовом классе у нас есть :
MessageClassA a = new MessageClassA();
MessageClassB b = new MessageClassB();
Если вы их сравните, то обнаружите, что они идентичны (за исключением внутреннего текста для идентификации между каждым методом), или пока один из них не будет изменен, или не будут отправлены отдельные параметры. "a" - это новый объект, производный от MessageClassA, как и "b" для MessageClassB.
Создавая экземпляр нового типа объекта, вы будете заключать контракт с новым объектом, который вы только что создали. И так; любые вновь созданные объекты с переменными свойств, установленными на объекте "а", не оказывают никакого влияния на объект "в", поскольку это не то же самое тело экземпляра, с которым оно было определено, а совершенно новое. Например, вставьте этот код в тестовое приложение, и вы получите представление о том, что происходит. Начиная с нашего базового класса :
public class BaseClass
{
public string XValue { get; set; } = "DefaultValue";
public void ExecuteMe()
{
MessageClassA a = new MessageClassA();
MessageClassB b = new MessageClassB();
LogMessage logMessage = new LogMessage();
BaseClass baseClass = new BaseClass();
baseClass.XValue = "foo";
logMessage.WriteMessage(a, XValue);
logMessage.WriteMessage(b, baseClass.XValue);
}
}
Далее мы добавим наш интерфейс, который будет говорить за нас.
public interface IMessageInterface
{
void WriteMessage(string s);
}
Затем добавьте следующие два класса. Обратите внимание, что вы можете вставить их все один за другим. Но я все равно опубликую полный источник ниже.
public class MessageClassA : IMessageInterface
{
public void WriteMessage(string s)
{
Debug.WriteLine($"Message from MessageClassA { s }");
}
}
public class MessageClassB : IMessageInterface
{
public void WriteMessage(string s)
{
Debug.WriteLine($"Message from MessageClassB { s }");
}
}
Завершение этого небольшого проекта с помощью нашего класса регистратора сообщений :
public class LogMessage
{
public void WriteMessage(IMessageInterface Message, string v)
{
Message.WriteMessage($": Variable is : {v}");
}
}
Чтобы выполнить этот фрагмент кода, вам нужна только кнопка и вставьте ее внутрь любой кнопки, которую вы выберете. Я использую кнопку 3 :
private void Button3_Click(object sender, EventArgs e)
{
var bc = new BaseClass();
bc.ExecuteMe();
}
После запуска кода Вы заметите в области консоли отладчика :
Цитата:
Сообщение от MessageClassA : переменная is : DefaultValue
Сообщение от MessageClassB : переменная is : foo
Обратите внимание, что "MessageClassB" не печатает ту же переменную, что и "MessageClassA" - это потому, что они являются двумя отдельными экземплярами, и каждый из них использует любые параметры, установленные для этого объявления объекта. Если следовать аналогии OriginalGriff, то это все равно, что зайти в автосалон и купить две машины совершенно одного типа.
Кроме того, когда вы возвращаетесь домой, вы заменяете красные кожаные ковшеобразные сиденья белыми кожаными ковшеобразными сиденьями. То же самое происходит с переменными каждого объекта, где автомобили-это ваши объекты, а сиденья-только параметр автомобиля.
При изучении этого задания важно понимать разницу между инстанцированием и статикой, а также разницу между ними. Это ничего не стоит, когда работаешь со статикой. Если объект объявлен статическим, вы можете
нет создайте экземпляр этого статического класса или объекта.
Использование статического объекта подобно объявлению глобального. Его легче получить и установить значения класса и его статических свойств без необходимости создания экземпляра. Использование статических классов, методов и свойств упрощает вызов кода, который может вызывать непосредственно тип объекта без необходимости создания экземпляра вообще.
Более того, эти правила в определенной степени верны, поэтому не попадайтесь на удочку, не понимая области действия модификаторов доступа. И на стороне примечания; что касается интерфейсов, то это также стоит отметить :
Цитата:
Объявление интерфейса может объявлять ноль или более членов. Членами интерфейса должны быть методы, свойства, события или индексаторы. Интерфейс не может содержать константы, поля, операторы, конструкторы экземпляров, деструкторы или типы, а также статические элементы любого типа.
Все члены интерфейса неявно имеют открытый доступ. Это ошибка времени компиляции для объявлений членов интерфейса, чтобы включить любые модификаторы. В частности, члены интерфейсов не могут быть объявлены с модификаторами abstract, public, protected, internal, private, virtual, override или static.
Если вы хотите узнать больше об интерфейсах, вы можете прочитать
Интерфейсы - Руководство По Программированию На C# | Microsoft Docs[
^] или задать новый вопрос на эту тему.
Я надеюсь, что это поможет вам немного лучше понять создание экземпляров и статику.
Кроме того, убедитесь, что вы понимаете объем вашего кода, читая их
Модификаторы Доступа - Руководство По Программированию На C# | Microsoft Docs[
^]
У меня здесь мало времени, поэтому я оставлю это здесь и надеюсь, что это поможет вам лучше понять, что делать. :)