[英]c# Method override. How to call it correctly
学习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 方法,并在其他类中重新分配它,以便搜索与以前相同?
可以用virtual关键字标记基类中的方法,然后用override关键字实现子类中的方法
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;
}
}
如果你想覆盖方法,它不能是static
(静态方法不能被覆盖)并且必须是虚拟的。 因此,删除搜索方法定义中的static
关键字并使方法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
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.