Конструктор возвращает указатель на существующий экземпляр - PullRequest
2 голосов
/ 03 июня 2019

Мне интересно, как создать конструктор класса по умолчанию.Я не хочу тратить ресурсы, поэтому я просто хочу, чтобы конструктор возвращал указатель на уже существующий экземпляр класса.

Это то, о чем я думал.Очевидно, что это не работает, но я хочу следовать логике этого кода.

public Sprite()
{
  return Default.MissingSprite;
}

public Sprite(Texture2D texture, SpriteDrawMode drawMode)
{
  if (drawMode != SpriteDrawMode.Sliced) throw new ArgumentException("...");
  this.texture = texture;
  this.drawMode = drawMode;
  this.sliceFraction = Default.SpriteSliceFraction;
}

public Sprite(Texture2D texture, SpriteDrawMode drawMode, float sliceFraction)
{
  this.texture = texture;
  this.drawMode = drawMode;
  this.sliceFraction = sliceFraction;
}

Я знаю, что конструкторы недействительны, поэтому я не могу вернуться в них.

Я НЕхочу просто присвоить значения экземпляру по умолчанию, так как это приведет к потере памяти, поскольку при этом будет просто создан дубликат экземпляра по умолчанию

//This is what I do NOT want
public Sprite()
{
  this.texture = Default.MissingSprite.texture;
  this.drawMode = Default.MissingSprite.drawMode;
  this.sliceFraction = Default.MissingSprite.sliceFraction;
}

Возможно ли то, чего я пытаюсь достичь?Есть ли проблемы с дизайном в моем мыслительном процессе?

1 Ответ

0 голосов
/ 03 июня 2019

Вы хотите сделать две операции, одна для создания экземпляра, а другая для возврата некоторого значения Default.MissingSprite.Это невозможно в C #.


Что вам нужно сделать, это создать свойство, которое обращается к состоянию и содержит это значение, такое как

public SpriteState State { get; set;}

Затем при создании (как в вашем примере )

public Sprite()
{
   State = Default.MissingSprite;
} 

Затем задайте другие State s в других конструкторах, в зависимости от ситуации.

Наконец, пользователь может проверить State свойство перед использованием.

var mySprite = new Sprite();

// Some code which could change the State...

switch (mySprite.State)
{
   case Default.MissingSprite:
      ...
   break;

   case Default.OkSprite:
      ...
   break;
  ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...