Przypisywanie wartości this

Przypisywanie wartości this
Wronq
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam!

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

Kopiuj
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:

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

lub

Kopiuj
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!

  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
 this(argumenty);

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

Wronq
  • Rejestracja: dni
  • Ostatnio: dni
0

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

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

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

Kopiuj
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.

Misiekd
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 7923
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ł

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
    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);
    }
Wronq
  • Rejestracja: dni
  • Ostatnio: dni
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!

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.