2011-03-24 17 views
7

Esto puede ser una pregunta estúpida, pero ¿qué significa declarando esto:¿Qué significa declarando la clase A del público: B

public class A: B{ 


} 

entiendo la herencia, sólo estoy acostumbrando a la sintaxis de C#

+0

'A' hereda de' B'? Y 'A' es una' clase' y 'clase A' es' pública' y el cuerpo de 'clase pública A' está vacío. – xanatos

+0

Dadas las respuestas que se han publicado hasta ahora, no puedo evitar preguntarme si hay algo más detrás de esta pregunta que usted no está compartiendo. ¿Hay algo más específico que estés buscando? ¿O solo la sintaxis básica de herencia? – David

+0

Para realizar un seguimiento de todas las explicaciones a continuación, lea la documentación sobre herencia en C#: http://msdn.microsoft.com/en-us/library/ms173149%28v=VS.100%29.aspx – Sorax

Respuesta

4

Debe mirar este artículo.

http://msdn.microsoft.com/en-us/library/ms173149.aspx

Es decir 2 cosas;

  • Usted está heredando de una clase
  • está implementando una interfaz

mirada a este código, podrá comprender.

// WorkItem implicitly inherits from the Object class. 
public class WorkItem 
{ 
    // Static field currentID stores the job ID of the last WorkItem that 
    // has been created. 
    private static int currentID; 

    //Properties. 
    protected int ID { get; set; } 
    protected string Title { get; set; } 
    protected string Description { get; set; } 
    protected TimeSpan jobLength { get; set; } 

    // Default constructor. If a derived class does not invoke a base- 
    // class constructor explicitly, the default constructor is called 
    // implicitly. 
    public WorkItem() 
    { 
     ID = 0; 
     Title = "Default title"; 
     Description = "Default description."; 
     jobLength = new TimeSpan(); 
    } 

    // Instance constructor that has three parameters. 
    public WorkItem(string title, string desc, TimeSpan joblen) 
    { 
     this.ID = GetNextID(); 
     this.Title = title; 
     this.Description = desc; 
     this.jobLength = joblen; 
    } 

    // Static constructor to initialize the static member, currentID. This 
    // constructor is called one time, automatically, before any instance 
    // of WorkItem or ChangeRequest is created, or currentID is referenced. 
    static WorkItem() 
    { 
     currentID = 0; 
    } 


    protected int GetNextID() 
    { 
     // currentID is a static field. It is incremented each time a new 
     // instance of WorkItem is created. 
     return ++currentID; 
    } 

    // Method Update enables you to update the title and job length of an 
    // existing WorkItem object. 
    public void Update(string title, TimeSpan joblen) 
    { 
     this.Title = title; 
     this.jobLength = joblen; 
    } 

    // Virtual method override of the ToString method that is inherited 
    // from System.Object. 
    public override string ToString() 
    { 
     return String.Format("{0} - {1}", this.ID, this.Title); 
    } 
} 

// ChangeRequest derives from WorkItem and adds a property (originalItemID) 
// and two constructors. 
public class ChangeRequest : WorkItem 
{ 
    protected int originalItemID { get; set; } 

    // Constructors. Because neither constructor calls a base-class 
    // constructor explicitly, the default constructor in the base class 
    // is called implicitly. The base class must contain a default 
    // constructor. 

    // Default constructor for the derived class. 
    public ChangeRequest() { } 

    // Instance constructor that has four parameters. 
    public ChangeRequest(string title, string desc, TimeSpan jobLen, 
         int originalID) 
    { 
     // The following properties and the GetNexID method are inherited 
     // from WorkItem. 
     this.ID = GetNextID(); 
     this.Title = title; 
     this.Description = desc; 
     this.jobLength = jobLen; 

     // Property originalItemId is a member of ChangeRequest, but not 
     // of WorkItem. 
     this.originalItemID = originalID; 
    } 
} 

class Program 
{ 
    static void Main() 
    { 
     // Create an instance of WorkItem by using the constructor in the 
     // base class that takes three arguments. 
     WorkItem item = new WorkItem("Fix Bugs", 
            "Fix all bugs in my code branch", 
            new TimeSpan(3, 4, 0, 0)); 

     // Create an instance of ChangeRequest by using the constructor in 
     // the derived class that takes four arguments. 
     ChangeRequest change = new ChangeRequest("Change Base Class Design", 
               "Add members to the class", 
               new TimeSpan(4, 0, 0), 
               1); 

     // Use the ToString method defined in WorkItem. 
     Console.WriteLine(item.ToString()); 

     // Use the inherited Update method to change the title of the 
     // ChangeRequest object. 
     change.Update("Change the Design of the Base Class", 
      new TimeSpan(4, 0, 0)); 

     // ChangeRequest inherits WorkItem's override of ToString. 
     Console.WriteLine(change.ToString()); 

     // Keep the console open in debug mode. 
     Console.WriteLine("Press any key to exit."); 
     Console.ReadKey(); 
    } 
} 
/* Output: 
    1 - Fix Bugs 
    2 - Change the Design of the Base Class 
*/ 
+0

muchas gracias, ¿así que esto es el equivalente de "extender" de Java? – RKM

+2

@Rosie ¡SÍ! Ellos son equivalentes. Mira este código que entenderás claramente .. http://www.heypasteit.com/clip/V82 –

+0

Hola, Soner, genial, muchas gracias. Me estoy acostumbrando a la sintaxis "C#" :) – RKM

5

Significa que la clase A hereda de la clase B. Hay muchos materiales en la web sobre herencia.

11

Indica que la clase sea hereda de la clase B, o implementa la interfaz B.

1

Esto puede significar dos cosas:

  • Estás heredan de una clase
  • está implementando una interfaz

Este es un concepto fundamental para la programación orientada a objetos por lo que no debe tener ningún problema para localizar información en Internet

+0

gracias, no me di cuenta de que esto es herencia, estoy acostumbrado a Java "extiende", entonces el ":" me confundió :) – RKM

Cuestiones relacionadas