Sign in to follow this  
Dreven

C#, начало разработки

Recommended Posts

Ситуация такая: начинаю разбивать функции по классам, вот например функции загрузки транспорта в отдельном классе, вызываю в отдельном паблике, выходит ошибка в консоль

	using GTANetworkAPI;
	namespace NewProject
{
    public class VehicleF : Script
    {
        public static void LoadVehicle()
        {
            NAPI.Vehicle.CreateVehicle(NAPI.Util.VehicleNameToModel("CarbonRS"), new Vector3(380.8715, -739.8875, 28.88084), 179, new Color(0, 255, 100), new Color(0));
            NAPI.Vehicle.CreateVehicle(NAPI.Util.VehicleNameToModel("Nemesis"), new Vector3(384.8715, -739.8875, 28.88084), 179, new Color(0, 255, 100), new Color(0));
            NAPI.Vehicle.CreateVehicle(NAPI.Util.VehicleNameToModel("Sandking"), new Vector3(388.8715, -739.8875, 28.88084), 179, new Color(0, 255, 100), new Color(0));
            NAPI.Vehicle.CreateVehicle(NAPI.Util.VehicleNameToModel("TrophyTruck"), new Vector3(392.8715, -739.8875, 28.88084), 179, new Color(0, 255, 100), new Color(0));
            NAPI.Util.ConsoleOutput("[LOAD] Транспорт успешно запущен");
        }
    }
}

Вот например файл vehicle.cs

А вот я его вызываю

	using System;
using GTANetworkAPI;
	namespace NewProject
{
    public class Class1 : Script
    {
        [ServerEvent(Event.ResourceStart)]
        public void OnResourceStart()
        {
            NAPI.Util.ConsoleOutput("Сервер успешно запущен");
            NAPI.Server.SetDefaultSpawnLocation(new Vector3(386.4574, -750.8737, 29.29371));
            /*NAPI.Vehicle.CreateVehicle(NAPI.Util.VehicleNameToModel("CarbonRS"), new Vector3(380.8715, -739.8875, 28.88084), 179, new Color(0, 255, 100), new Color(0));
            NAPI.Vehicle.CreateVehicle(NAPI.Util.VehicleNameToModel("Nemesis"), new Vector3(384.8715, -739.8875, 28.88084), 179, new Color(0, 255, 100), new Color(0));
            NAPI.Vehicle.CreateVehicle(NAPI.Util.VehicleNameToModel("Sandking"), new Vector3(388.8715, -739.8875, 28.88084), 179, new Color(0, 255, 100), new Color(0));
            NAPI.Vehicle.CreateVehicle(NAPI.Util.VehicleNameToModel("TrophyTruck"), new Vector3(392.8715, -739.8875, 28.88084), 179, new Color(0, 255, 100), new Color(0));*/
            VehicleF.LoadVehicle();
        }
    }
}

Ошибка:

	-> Starting main resource..
main: setting as Gamemode resource
main: loading scripts.. found 1 script(s)
main: compiling scripts..
	CS0103: The name 'VehicleF' does not exist in the current context
       -> Class1.cs:16
	
-> Error starting main due compilation error(s).

Share this post


Link to post
Share on other sites
Название 'VehicleF' не существует в данном контексте 
       -> Class1.cs: 16 строка

Share this post


Link to post
Share on other sites

Чтобы функцию одного класса вызвать в другом, надо в этом другом классе создать экземпляр класса, в котором находится функция. Тут надо почитать про принципы ООП и области видимости, чтобы в этом разобраться.

Share this post


Link to post
Share on other sites
В 04.03.2019 в 17:23, Thomas Morgan сказал:

Чтобы функцию одного класса вызвать в другом, надо в этом другом классе создать экземпляр класса, в котором находится функция. Тут надо почитать про принципы ООП и области видимости, чтобы в этом разобраться.

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

Цитата
The name 'VehicleF' does not exist in the current context

Стоит проверить неймспейсы и посмотреть, прописаны ли юзинги. Советую поставить reSharper на студию, он отлично помогает решать такие проблемы.

Share this post


Link to post
Share on other sites
Posted (edited)

VehicleF c1 = new VehicleF();

c1.LoadVehicle(); тоже не особо помогает

Edited by Dreven

Share this post


Link to post
Share on other sites

Да, код не почитал. Если у тебя метод статический, можешь просто обратиться к нему по имени класса, то есть

VehicleF.LoadVehicle(); 

 

Share this post


Link to post
Share on other sites

Статический и не могу обратится)) Там была проблема с указанием пути к папкам, точнее с содержанием файлов в разных папках, не знаю с чем это связано, но класс с  одной папки не работает в файле в другой папке, если оба файла в одной папке то все ок, не стал останавливаться на этой проблеме, пока что загрузил все в одну папку, дальше если разберусь то уже отсортирую

Share this post


Link to post
Share on other sites

Не знаю актуальна ли проблема в данный момент, но предложу решение:

using GTANetworkAPI;

namespace NewProject
{
    public static class VehicleF
    {
        public static void LoadVehicle()
        {
            NAPI.Vehicle.CreateVehicle(NAPI.Util.VehicleNameToModel("CarbonRS"), new Vector3(380.8715, -739.8875, 28.88084), 179, new Color(0, 255, 100), new Color(0));
            NAPI.Vehicle.CreateVehicle(NAPI.Util.VehicleNameToModel("Nemesis"), new Vector3(384.8715, -739.8875, 28.88084), 179, new Color(0, 255, 100), new Color(0));
            NAPI.Vehicle.CreateVehicle(NAPI.Util.VehicleNameToModel("Sandking"), new Vector3(388.8715, -739.8875, 28.88084), 179, new Color(0, 255, 100), new Color(0));
            NAPI.Vehicle.CreateVehicle(NAPI.Util.VehicleNameToModel("TrophyTruck"), new Vector3(392.8715, -739.8875, 28.88084), 179, new Color(0, 255, 100), new Color(0));
            NAPI.Util.ConsoleOutput("[LOAD] Транспорт успешно запущен");
        }
    }
}

Раз инициализация класса не нужна, можно сделать его статичным и убрать наследование от Script.

Таким образом, обратиться к методу класса можно следующим образом:

//...
VehicleF.LoadVehicle();
//...

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.