Como posso criar opt-in herança método em C #?

votos
1

Eu quero criar uma estrutura de código em C # que me permite herdar uma classe ou interface, mas deixa-o opt-in para os métodos de herança de classes.

Um exemplo perfeito do que eu quero é como MonoBehaviour da Unidade funciona. Você só escrever código para o que você precisa e é simples - não há necessidade de escrever métodos da classe base que você só vai deixar vazio.

Exemplo de utilização Unidade:

public class MyUpdater : MonoBehaviour
{
  int num = 0;

  void Update()
  {
    num++;
  }
}

MonoBehaviour classe contém também outros métodos opt-in (Iniciar, OnDestroy, exc.), Mas o compilador não vai se importar.

Obviamente Unidade tem um pedaço de um monte acontecendo dentro MonoBehaviour, e eu não estou olhando para recriá-lo. (Na verdade, eu estou trabalhando dentro da unidade)

Gosto da estrutura do código, e eu também trabalho como freelancer com pessoas que podem não ser tão bom com codificação. Não precisando usar substituições ou exc torna mais fácil de entender e estender o que eu criei.

Obrigado por tomar o tempo para ler! :)


EDITAR:

Para algum esclarecimento, eu sou de nenhuma maneira nova a unidade ou a codificação, no entanto, estou autodidata. Eu, principalmente, trabalhar com a criação de sistemas de back-end.

Como alguém sugerido abaixo, eu estou perguntando sobre como replicar métodos Magic da Unidade para as classes que não se estendem a partir MonoBehaviour.

Publicado 20/09/2018 em 04:18
fonte usuário
Em outras línguas...                            


1 respostas

votos
3

Resposta 3, se por algum motivo você estiver interessado no mecanismo pelo qual as funções "mágicas" do trabalho unidade na Unidade (na versão atual - ela muda muito)

certifique-se de google a grande discussão sobre isso, exemplo:

Como fazer a atualização acordado privada Unidade e iniciar métodos funcionam?

É muito desinteressante e não afeta nada.

Você pode gostar deste QA longa semelhante que chega ao coração dessa questão:

Na Unidade, como é que a Unidade magicamente chamar todos "Interfaces"?


É provável que você está olhando apenas para os Newe Overridepalavras-chave em C #.

(Cada língua tem um pouco diferentes de sintaxe / paradigmas para a herança.)

Override estende-se a função na classe base, e New esconde -lo. A escolha é sua :)

É amplamente explicado, exemplo

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/knowing-when-to-use-override-and-new-keywords

(Se você está pedindo, literalmente, sobre o paradigma incomum de funções da unidade "mágicas" ( Update()etc), não é possível fazer isso, e você não quer de qualquer maneira.)


Há outra coisa possível que você está perguntando:

É bastante comum para os novos devs Unity não perceber isto:

Como você diz Unity dá-lhe MonoBehavior.

Programadores nova unidade muitas vezes não percebem que você costuma fazer uma classe "base" utilizando MonoBehavior

 class Weapon: MonoBehavior {
    ... explosions
    ... sound effects
    ... etc
 }

e então você e os outros programadores, escrever classes com base nessa classe:

class Slingshot: Weapon {
class Peashooter: Weapon {
class SplatRoller: Weapon {

Note-se que essas novas classes são realmente MonoBehaviors - você pode, fazer e deve usar "Awake", "Update" etc normalmente neles!

Eu acho que pode ser o que você está pedindo.

Respondeu 20/09/2018 em 04:32
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more