學習c#,并嘗試寫一個帖子搜索
在這段代碼中,一切都對我有用:
using System;
using System.Collections.Generic;
namespace _3._1
{
class Program {
static void Main(){
List<Message> messages = new List<Message>();
messages.Add(new SmsMessage {text = "Hello!"});
messages.Add(new SmsMessage {text = "What?"});
messages.Add(new SmsMessage {text = "You?"});
messages.Add(new EmailMessage {text = "Show"});
messages.Add(new EmailMessage {text = "You!"});
messages.Add(new EmailMessage {text = "Hello!"});
string query = Console.ReadLine();
int i = 0;
foreach(Message str in messages){
if(Message.Search(str, query)){
i ;
}
}
Console.WriteLine($"query: {query} | coincidences: {i}");
}
}
class Message {
public string text { get; set; }
public static bool Search(Message message, string query){
if(message.text.Contains(query))return true;
return false;
}
}
class SmsMessage : Message {
public string phone;
}
class EmailMessage : Message {
public string email;
public string subject;
}
}
但是如何覆寫 Virtual 上的 Search 方法,并在其他類中重新分配它,以便搜索與以前相同?
uj5u.com熱心網友回復:
static成員不能virtual,因此不能被覆寫。在你的情況下看起來你可以讓你的Search方法非靜態,然后virtual
class Message {
public string text { get; set; }
public virtual bool Search(string query){
if(this.text.Contains(query))return true;
return false;
}
}
class SmsMessage : Message {
public string phone;
public virtual bool Search(string query){
//search code here;
}
}
uj5u.com熱心網友回復:
如果你想覆寫方法,它不能是static(靜態方法不能被覆寫)并且必須是虛擬的。因此,洗掉static搜索方法定義中的關鍵字并創建 method virtual。
class Message {
public string text { get; set; }
public virtual bool Search(Message message, string query){
if(message.text.Contains(query))return true;
return false;
}
}
class SmsMessage : Message {
public string phone;
public override bool Search(Message message, string query) {
// do something
}
}
uj5u.com熱心網友回復:
可以用virtual關鍵字標記基類中的方法,然后用override關鍵字實作子類中的方法
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/350333.html
上一篇:如何從我自己的System命名空間(包含我的自定義Int32)中訪問dotnet的System.Int32型別?
