Przypisywanie wartości this

0

Witam!

Mam pewien problem z klasami. Najpierw pokażę kawałek kodu, a potem dokładnie powiem o co mi chodzi.

public class DMesh
{
    private Mesh mesh;
    private Material[] materials;
    private Texture[] textures;
    private Device device;

    public DMesh(Mesh Mesh, Material[] Materials, Texture[] Textures, Device Device)
    {
        this.mesh = Mesh;
        this.materials = Materials;
        this.textures = Textures;
        this.device = Device;
    }

    public static DMesh LoadMesh(Device Device, string filename)
    { /*wczytywanie mesha z pliku*/
        return new DMesh(mesh, meshmaterials, meshtextures, Device);
    }
}

Ok. W pewnym momencie zachciało mi się konstruktora, któremu podawałbym tylko ścieżkę i Device, a on sam wczytywałby się z pliku. Po kilku próbach uznałem, że to zadanie mnie przerasta, kombinowałem na kilka sposobów, np. tak:

public DMesh(string Path, Device Device)
{
    this = LoadMesh(Device, Path);
}

lub

public DMesh(string Path, Device Device)
{
    return LoadMesh(Device, Path);
}

ale żaden z nich oczywiście nie zadziałał. Nie chciałbym kopiować całej funkcji wczytującej do konstruktora. Więc jakie jest ładne i szybkie rozwiązanie mojego problemu?

Pozdrawiam, Wronq!

0

W javie wywołanie konstruktora z innego konstruktora tej samej klasy wygląda tak

 this(argumenty);

Sprawdź, może w C# jest analogicznie.

0

Owszem, w C# jest coś takiego ale wywoływane jest w +/- taki sposób:

public DMesh(string Path, Device Device) : this(Path)
{
    /* ... */
}

I raczej nie o to chodzi. Natomiast doszedłem do czegoś takiego:

public DMesh(string Path, Device Device)
{
    DMesh m = LoadMesh(Device, Path);

    this.materials = m.materials;
    this.textures = m.textures;
    this.device = m.device;
    this.mesh = m.mesh;
}

To działa, lecz jeżeli mesh będzie miał więcej właściwości, a będzie, to ta funkcja znacznie się wydłuży.

0

albo LoadMesh zrobisz metodą klasy DMesh albo zamiast zwracać obiekt DMesh będziesz go podawał do LoadMesh. Mogę się tylko domyślać, że LoadMesh tworzy obiekt DMesh i jeśli tak jest to nie możesz tego użyć tak jakbyś chciał

0

tak se ne da. przenieś ładowanie do konstruktora, a jak chcesz zachować funkcję statyczną to tam wywołuj konstruktor.
albo zrób tak:

    private void LoadFromFile(Device Device, string filename)
    { 
       // ładowanie z pliku
    }

    public DMesh(string Path, Device Device)
    {
       LoadFromFile(Path,Device);
    }

    public static DMesh LoadMesh(Device Device, string filename)
    {
       return new DMesh(Device, filename);
    }
0

Stwierdziłem, że ułatwię sobie życie i zostawiłem tylko jeden konstruktor z nazwą mesha i device oraz nie-statyczne loadMesh. Dzięki za pomoc!

1 użytkowników online, w tym zalogowanych: 0, gości: 1