2011-03-24 56 views
7

這可能是一個愚蠢的問題,但到底是什麼它通過聲明這意味着:是什麼通過聲明公共類平均:乙

public class A: B{ 


} 

我明白繼承,我剛開始使用的C#語法

+0

'A'從'B'繼承?而'A'是'class','A'''是'public','public class A'的主體是空的。 – xanatos 2011-03-24 13:17:27

+0

鑑於迄今爲止發佈的答案,我不禁想知道這個問題背後是否有更多的東西沒有分享。有什麼更具體的你在找什麼?或者只是基本的繼承語法? – David 2011-03-24 13:18:00

+0

要跟進以下所有解釋,請閱讀C#中繼承的文檔:http://msdn.microsoft.com/en-us/library/ms173149%28v=VS.100%29.aspx – Sorax 2011-03-24 13:19:20

回答

4

你應該看看這篇文章。

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

這意味着兩兩件事;

  • 您正在從一個類繼承
  • 你實現一個接口

看看這段代碼,你就明白了。

// 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

非常感謝,所以這相當於Java的「擴展」? – RKM 2011-03-24 13:22:01

+2

@Rosie YES!它們是等價的。看看你將清楚明白這個代碼.. http://www.heypasteit.com/clip/V82 – 2011-03-24 13:25:39

+0

嗨,Soner,太好了,非常感謝。我只是習慣於「C#」語法:) – RKM 2011-03-24 13:30:56

5

這意味着類A從類B繼承。網上有很多關於繼承的材料。

11

這表明該類無論是從B類繼承,或實現接口B.

1

這可能意味着兩兩件事:

  • 你從一個類
  • 你實現繼承一個接口

這是一個面向對象的編程的基本概念,所以你不應該有任何困難定位在互聯網上的信息

+0

謝謝,我沒有意識到這是繼承,我習慣於Java的「擴展」,所以「:」讓我感到困惑:) – RKM 2011-03-24 13:22:46