Skocz do zawartości

[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?

Odnośnik do komentarza
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

Odnośnik do komentarza
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.

Odnośnik do komentarza
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?

Odnośnik do komentarza
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ś.

Odnośnik do komentarza
Udostępnij na innych stronach

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

Jedynie 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ę poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...