¿Qué clase de clase infantil causó el método padre estático? O misión imposible? -- # campo con oop camp Relacionados El problema

What child-class caused static parent method? Or mission impossible?


0
vote

problema

Español

Tengo una tarea de prueba durante la entrevista para el Post de C # Programador, pero nunca pudo resolverlo, porque no entiendo lo que se requiere.

Escribo esto porque quiero mejorar, para terminar el comienzo de los negocios, a comprender y saber qué no entendió o no sabía en la medida de lo posible.

Con las palabras "Este es un entrevistador de prueba muy simple" me envió un mensaje en el correo electrónico. Cito la declaración:

Clases "A" y "B" no incluyen la implementación de las propiedades, Campos y métodos que no se atribuyen y son herederos de un común. Ancestro "C"

1) No creando instancias de las clases descritas, debe implementar la clase "C" Método estático con la firma public static string GetName() para que es verdadero A.GetName() == "A" && B.GetName() == "B"

2) Implementar una única variable de recuento del número de instancias de todos los herederos de clase con la firma public static int Count en el clase, no enlace fuera de la línea de sucesión

Le pregunto al entrevistador de preguntas que se entiende por las constantes "A" y "B", y respondió que son los nombres de las clases. Es decir, el método GETNAME () debe devolver el nombre de la clase descendiente.

En el proceso de tratar de implementar exactamente como se describe en el breve y furioso, se encontraron material de StackOverFlow: ¿Cómo obtener el tipo de clase en un método estático de clase base en .NET?

y

Inherited Caller Type Name in Base Static Class

Dónde, como entiendo, argumenta que para obtener el nombre de la clase descendiente de un método estático no es posible sin hacks.

Consideré algunas otras opciones (por ejemplo, crear una nueva clase que no se describe en el trabajo), pero todos involucran intentos de eludir las condiciones, que no se ajusta al entrevistador de palabras que existe una solución específica, Creo que debería ser justo y simple, ya que inicialmente reclamó.

Pude hacer solo eso, pero sé que está mal, porque el método GETNAME no estático e instanciado clase:

1:

  using System;  namespace Rextester {     public class Program     {         public static void Main(string[] args)         {             Console.WriteLine ( new A().GetName() == "A" && new B().GetName() == "B" );         }     }     class C {         public string GetName() {             return this.GetType().Name;         }     }     class A : C{}     class B : C{}  }   

2:

  using System;  namespace Rextester {     public class Program     {         public static void Main(string[] args)         {             var a = new A();             var b = new B();             var c = new C();         }     }     public class C {         public static int Count;          public C () {              if ( this is A                || this is B )                 Count++;             Console.WriteLine ( "Count is: " + Count );         }       }     public class A : C{}     public class B : C{}  }   

Respuesta del entrevistador:

Él: Buen día, veo, pero tengo que decepcionar, el problema tiene un concreto. SOLUCIÓN

yo: es decir, ninguno de los dos puntos inválidos?

él: el segundo depende de la primera

Él: apropiadamente, el primero no es cierto, ya que CREATE COPIES no puede

Por favor, ayúdame a resolver este problema. Me parece que en la formulación hay contradicciones, cuanto más se usa el doble negativo que es difícil de entender.

Original en ingles

I got a test task during the interview for the post of C# programmer, but was never able to solve, because I do not understand what is required.

I write this because I want to improve, to finish the begun business, to understand and know what to didn't understand or didn't know to the extent possible.

With the words "this is very simple test" interviewer sent me message on email. I quote the statement:

Classes "A" and "B" do not include the implementation of the properties, fields and methods that are not attributed and are heirs of a common ancestor "C"

1) not creating instances of the described classes, you should implement the "C" class static method with the signature public static string GetName() for which is true A.GetName() == "A" && B.GetName() == "B"

2) implement a single count-variable of the number of instances of all the heirs of class with the signature public static int Count in the class, not liaise outside the line of succession

I ask the question interviewer what is meant by constants "A" and "B" - and he answered that it is the class names. Ie the GetName() method should return the name of the descendant class.

In the process of trying to implement exactly as described in the brief and furious googling were found material from stackoverflow: How to get the class Type in a base class static method in .NET?

and

Get inherited caller type name in base static class

Where, as I understand, argues that to get the name of the descendant class from a static method is not possible without hacks.

I considered a few other options (e.g. creating a new class that is not described in the job), but they all involve attempts to circumvent the conditions, that does not fit with the words interviewer that there is a specific solution, I think it should be fair and simple, since he initially claimed.

I was able to do just that, but I know that it's wrong, because the GetName method non-static and instantiated class:

1:

using System;  namespace Rextester {     public class Program     {         public static void Main(string[] args)         {             Console.WriteLine ( new A().GetName() == "A" && new B().GetName() == "B" );         }     }     class C {         public string GetName() {             return this.GetType().Name;         }     }     class A : C{}     class B : C{}  } 

2:

using System;  namespace Rextester {     public class Program     {         public static void Main(string[] args)         {             var a = new A();             var b = new B();             var c = new C();         }     }     public class C {         public static int Count;          public C () {              if ( this is A                || this is B )                 Count++;             Console.WriteLine ( "Count is: " + Count );         }       }     public class A : C{}     public class B : C{}  } 

Response of interviewer:

he:good day, I see, but have to disappoint, the problem has a concrete solution

me:ie, neither of the two points invalid?

he:the second depends on the first

he:appropriately, the first is not true, as create copies can not

Please help me to solve this problem. It seems to me that in the formulation there are contradictions, the more it is used the double negative that it is difficult to understand.

     
       
       

Lista de respuestas

1
 
vote
vote
La mejor respuesta
 

Tal vez:

  //This _assumes_ you're allowed to use Generics, seems impossible otherwise as A.GetName would compile to C.GetName void Main() {     A.GetName().Dump(); //A     B.GetName().Dump(); //B     new A();new A();new A();new A();     new B();     //For part 2 I'm not 100% sure what number is wanted         baseC.TotalCount.Dump(); //5      A.Count.Dump(); //4     B.Count.Dump(); //1 }  abstract class baseC  //cant think of any way to stop something other than C inheriting unless in own assembly // if TotalCount is not the one wanted this can be dropped {     public static int TotalCount {get; protected set;} //Must be in the non-generic part so only one copy }  abstract class C<T> : baseC where T: C<T> //Hopefully enough to FORCE A to inherit C<A> etc {     public static int Count {get; private set;}     public static string GetName()      {         return typeof(T).Name;     }     protected C()      {          TotalCount++;         Count++;     } }   
 

Maybe:

//This _assumes_ you're allowed to use Generics, seems impossible otherwise as A.GetName would compile to C.GetName void Main() {     A.GetName().Dump(); //A     B.GetName().Dump(); //B     new A();new A();new A();new A();     new B();     //For part 2 I'm not 100% sure what number is wanted         baseC.TotalCount.Dump(); //5      A.Count.Dump(); //4     B.Count.Dump(); //1 }  abstract class baseC  //cant think of any way to stop something other than C inheriting unless in own assembly // if TotalCount is not the one wanted this can be dropped {     public static int TotalCount {get; protected set;} //Must be in the non-generic part so only one copy }  abstract class C<T> : baseC where T: C<T> //Hopefully enough to FORCE A to inherit C<A> etc {     public static int Count {get; private set;}     public static string GetName()      {         return typeof(T).Name;     }     protected C()      {          TotalCount++;         Count++;     } } 
 
 
0
 
vote

Gracias a todos. Gracias al usuario https://ru.stackoverflow.com/users/186999/grundy y la investigación propia que encontré La respuesta a la primera parte esta pregunta:

  using System; namespace Rextester {     public class Program     {         public static void Main(string[] args)         {             Console.WriteLine ( A.GetName() == "A" && B.GetName() == "B" );         }     }     class C<T> {         public static string GetName(){             return typeof(T).Name;         }     }     class A : C<A>{ }     class B : C<B> { }  }   

Pero todavía necesito su ayuda para saber la respuesta a la segunda parte de la pregunta.

 

Thank you all. Thanks to the user https://ru.stackoverflow.com/users/186999/grundy and own research I found the answer to first part this question:

using System; namespace Rextester {     public class Program     {         public static void Main(string[] args)         {             Console.WriteLine ( A.GetName() == "A" && B.GetName() == "B" );         }     }     class C<T> {         public static string GetName(){             return typeof(T).Name;         }     }     class A : C<A>{ }     class B : C<B> { }  } 

but I still need your help to know the answer to the second part of question.

 
 
 
 

Relacionados problema

682  Agregar un método a una instancia de objeto existente  ( Adding a method to an existing object instance ) 
He leído que es posible agregar un método a un objeto existente (es decir, no en la definición de clase) en Python. Entiendo que no siempre es bueno hacerlo...

53  Pasar por referencia o pasar por valor? [cerrado]  ( Pass by reference or pass by value ) 
Según lo que actualmente representa, esta pregunta no es un buen ajuste para nuestro Q & Amp; un formato. Esperamos que las...

56  ¿Debo usar clases anidadas en este caso?  ( Should i use nested classes in this case ) 
Estoy trabajando en una colección de clases utilizadas para la reproducción de video y la grabación. Tengo una clase principal que actúa como la interfaz públ...

30  ¿Filtrado de spam bayesiano orientado a objetos?  ( Object oriented bayesian spam filtering ) 
Me preguntaba si hay alguna implementación de programación (OOP) orientada a objetos buena (OOP) de filtrado bayesiano para la clasificación de spam y texto? ...

55  Vistas de clase en Django  ( Class views in django ) 
django Ver puntos a una función, lo que puede ser un problema si quieres cambiar solo un poco de funcionalidad. Sí, podría tener un millón de argumentos de ...

2  Diseño lógico versus físico  ( Logical versus physical design ) 
Tengo una pregunta de diseño muy general, pero lo enmarcaré en términos concretos con un ejemplo. Supongamos que está trabajando en un software incrustado p...

13  ¿Cómo evitar las asignaciones / asignaciones sucesivas en C ++?  ( How to avoid successive deallocations allocations in c ) 
Considere el siguiente código: class A { B* b; // an A object owns a B object A() : b(NULL) { } // we don't know what b will be when constructing ...

0  Convención de nombres arbitrarios (objetos comerciales)  ( Arbitrary naming convention business objects ) 
OK, ¿realiza - (void)drawRect:(CGRect)rect0 o - (void)drawRect:(CGRect)rect111 - (void)drawRect:(CGRect)rect2 o - (void)drawRect:(CGRect)rect3 ¿Qué ...

21  ¿La clase inmutable debe ser definitiva?  ( Immutable class should be final ) 
dice en este artículo que: Haciendo una final de clase porque es inmutable es una buena razón para hacerlo. Estoy un poco desconcertado por esto ... E...

98  ¿Cómo accedería a las propiedades de objetos desde un método de objeto? [cerrado]  ( How would you access object properties from within an object method ) 
Según lo que actualmente representa, esta pregunta no es un buen ajuste para nuestro Q & Amp; un formato. Esperamos que las...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos