Skocz do zawartości
MaxGaming

[C#] Jedna funkcja dla kilku klas?

Rekomendowane odpowiedzi

Problem jest następujący:

mam pewną funkcję która jest wykorzystywana w kilku formatkach(każda formatka osobna klasa). Po prostu robię kopiuj -> wklej z jednej do drugiej.

 

I tak się zastanawiam, nie ma jakiejś opcji zrobienia tego nie wiem - na zasadzie osobnego pliku z tymi funkcjami wspólnymi(mam takich funkcji kilka) i jakoś "doklejać" do kodu tamtych? Coś jak include w PHP?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Możesz to zrobić na kilka sposobów:

  1. Zrobić funkcje statyczną i po prostu w tych klasach robisz funkcję która używa tej statycznej funkcji

    public static int FunkcjaZkodem(int argument)
    {
        /*
        Jakiś kod
        */
        return coś tam;
    }

    i w jakiejś tam klasie np.

    private int Funkcja(int argument)
    {
        return Blabla.FunkcjaZkodem(argument)
    }

  2. dopisać do nazwy klasy inną klasę po dwukropku(nie pamiętam jak to się nazywało :D)

    public class KlasaZFunkcja
    {
        public int FunkcjaZkodem(int argument)
        {
            /*
            Jakiś tam kod
            */
            return coś tam;
        }
    }
    
    public class Klasa : KlasaZFunkcja
    {
        /*
        Coś tam
        */
    }

    i wtedy używasz tej funkcji jakby była w tej klasie :D

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

W obrębie klasy masz metody, nie funkcje. To drugie nazywa się dziedziczenie. Możesz również użyć podstawowej właściwości obiektowego programowania, czyli obiektów. Tworzysz sobie klasę np. Methods. W niej zawierasz publiczne metody, których potrzebujesz. Potem tworzysz jej instancję w klasie w której potrzebujesz tych metod i się odwołujesz do niej. Tada! Działa.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Ini;

namespace Spectrum_Bet_Manager
{
    class Class1
    {
        public void LoadLanguageSetting()
        {
            if (File.Exists(@"Configs.ini"))
            {
                IniParser ConfigParser = new IniParser(@"Configs.ini");

                switch (ConfigParser.GetSetting("Settings", "Language"))
                {
                    case "Polski":
                        Lang = "PL";
                        break;

                    case "English":
                        Lang = "EN";
                        break;

                    default:
                        MessageBox.Show("Language settings is incorect!\nSelected Polish.");
                        break;
                }
            }
            else
            {
                MessageBox.Show("Language settings not found!\nSelected Polish.");
            }
        }
    }
}

 

Teraz jak zrobić, żeby to Lang = XX odwoływało się do zmiennej Lang do formatki z poziomu której aktualnie jest wykonywany?

I kolejna sprawa to ta funkcja jeszcze jest uproszczona, ale nie ma żadnej metody działającej typowo jak include w PHP? Po prostu kod był jakby "doklejany", żeby nie trzeba było właśnie się bawić w przekazywanie zmiennych itp? Tylko jak wywołam z poziomu jakiejś klasy to wszystko się tyczy tej klasy?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Nie ma czegoś takiego że wszystko się tyczy "klasy". Wszystko się tyczy tego do czego się odwołasz. C# jest takim językim że jak użyjesz po prostu zmiennych to będą one się tyczyć zmiennych klasowych. Chcesz inne zmienne? Odwołaj się do nich lub przekaż je jako argumenty( ale wszystko jest klasą, nie ma wolnych zmiennych. Zawsze natomiast można zrobić klasę statyczną która będzie imitować zmienne globalne ).

Nie ma żadnego doklejania bo można to uzyskać innymi metodami, a doklejanie kodu gdziekolwiek ręcznie jest sprzeczne ze zdrowym rozsądkiem( o takie rzeczy dba kompliator by wszystko poskładać, nie programista )

 

Opisz mi co chcesz osiągnąć to powiem Ci jak to zrobić. Najelpiej jakiś przypadek użycia / historyjka i z czym masz problem, bo na ten moment nie rozumiem na czym tak naprawdę utkąłeś.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×