{"id":392,"date":"2022-01-06T10:17:38","date_gmt":"2022-01-06T03:17:38","guid":{"rendered":"https:\/\/csharptutorial.net\/?page_id=392"},"modified":"2022-06-03T14:56:50","modified_gmt":"2022-06-03T07:56:50","slug":"csharp-virtual","status":"publish","type":"page","link":"https:\/\/www.csharptutorial.net\/csharp-tutorial\/csharp-virtual\/","title":{"rendered":"C# virtual"},"content":{"rendered":"\n<p><strong>Summary<\/strong>: in this tutorial, you&#8217;ll learn how to use the C# virtual modifier and how to use it to define a virtual method.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Introduction to the C# virtual modifier<\/h2>\n\n\n\n<p>In <a href=\"https:\/\/csharptutorial.net\/csharp-tutorial\/csharp-inheritance\/\">inheritance<\/a>, a <a href=\"https:\/\/csharptutorial.net\/csharp-tutorial\/csharp-class\/\">class<\/a> (subclass) inherits from another class (base class). If a member in the subclass has the same name as the one in the base class, the member in the subclass replaces (or hides) the member in the base class. <\/p>\n\n\n\n<p>For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Person<\/span>\n{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> Name { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> <span class=\"hljs-title\">Introduce<\/span>(<span class=\"hljs-params\"><\/span>)<\/span> =&gt; <span class=\"hljs-string\">$\"Hi, I'm <span class=\"hljs-subst\">{Name}<\/span>.\"<\/span>;\n}\n\n<span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Employee<\/span> : <span class=\"hljs-title\">Person<\/span>\n{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> JobTitle { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> new <span class=\"hljs-keyword\">string<\/span> <span class=\"hljs-title\">Introduce<\/span>(<span class=\"hljs-params\"><\/span>)<\/span> =&gt; <span class=\"hljs-string\">$\"Hi, I'm <span class=\"hljs-subst\">{Name}<\/span>. I'm a <span class=\"hljs-subst\">{JobTitle}<\/span>.\"<\/span>;\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In this example, the <code>Introduce()<\/code> method in the <code>Employee<\/code> class hides the <code>Introduce()<\/code> method in the <code>Person<\/code> class. The <a href=\"https:\/\/csharptutorial.net\/csharp-tutorial\/c-new-modifier\/\"><code>new<\/code> modifier<\/a> explicitly communicates our intent.<\/p>\n\n\n\n<p>However, if you want a member in the subclass to override the member with the same name in the base class, you need to:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>First, use the <code>virtual<\/code> modifier in the declaration of the member of the base class <\/li><li>Second, use the <code>override<\/code> modifier in the declaration of the member in the subclass.<\/li><\/ul>\n\n\n\n<p>For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Person<\/span>\n{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> Name { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">virtual<\/span> <span class=\"hljs-keyword\">string<\/span> <span class=\"hljs-title\">Introduce<\/span>(<span class=\"hljs-params\"><\/span>)<\/span> =&gt; <span class=\"hljs-string\">$\"Hi, I'm <span class=\"hljs-subst\">{Name}<\/span>.\"<\/span>;\n}\n\n<span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Employee<\/span> : <span class=\"hljs-title\">Person<\/span>\n{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> JobTitle { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">override<\/span> <span class=\"hljs-keyword\">string<\/span> <span class=\"hljs-title\">Introduce<\/span>(<span class=\"hljs-params\"><\/span>)<\/span> =&gt; <span class=\"hljs-string\">$\"Hi, I'm <span class=\"hljs-subst\">{Name}<\/span>. I'm a <span class=\"hljs-subst\">{JobTitle}<\/span>.\"<\/span>;\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In this example:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Use the <code>virtual<\/code> keyword to modify the declaration of the <code>Introduce()<\/code> method in the <code>Person<\/code> class.<\/li><li>Use the <code>override<\/code> keyword to modify the declaration of the <code>Introduce()<\/code> method in the <code>Employee<\/code> class.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Differences between new and override modifiers<\/h2>\n\n\n\n<p>Let&#8217;s take an example to understand the difference between the new and override modifiers.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The override method<\/h3>\n\n\n\n<p>The <code>override<\/code> modifier&nbsp;instructs the C# compiler to use the last defined implementation of a method; even if you call the method on a reference of the base class. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Person<\/span>\n{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> Name { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">virtual<\/span> <span class=\"hljs-keyword\">string<\/span> <span class=\"hljs-title\">Introduce<\/span>(<span class=\"hljs-params\"><\/span>)<\/span> =&gt; <span class=\"hljs-string\">$\"Hi, I'm <span class=\"hljs-subst\">{Name}<\/span>.\"<\/span>;\n}\n\n<span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Employee<\/span> : <span class=\"hljs-title\">Person<\/span>\n{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> JobTitle { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">override<\/span> <span class=\"hljs-keyword\">string<\/span> <span class=\"hljs-title\">Introduce<\/span>(<span class=\"hljs-params\"><\/span>)<\/span> =&gt; <span class=\"hljs-string\">$\"Hi, I'm <span class=\"hljs-subst\">{Name}<\/span>. I'm a <span class=\"hljs-subst\">{JobTitle}<\/span>.\"<\/span>;\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-comment\">\/\/ Program.cs<\/span>\n<span class=\"hljs-keyword\">var<\/span> employee = <span class=\"hljs-keyword\">new<\/span> Employee()\n{\n    Name = <span class=\"hljs-string\">\"John Doe\"<\/span>,\n    JobTitle = <span class=\"hljs-string\">\"C# Developer\"<\/span>\n};\nConsole.WriteLine(employee.Introduce());\n\n\nPerson person = employee;\nConsole.WriteLine(person.Introduce()); <\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"plaintext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">Hi, I'm John Doe. I'm a C# Developer.\nHi, I'm John Doe. I'm a C# Developer.<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">plaintext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In this example, when we call the Introduce() method, the compiler executes the method defined in the Employee class as expected.<\/p>\n\n\n\n<p>And when we call the Introduce() method on an instance of the Person class, the compiler also executes the Introduce() method defined in the Employee class.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The new method <\/h3>\n\n\n\n<p>The <a href=\"https:\/\/csharptutorial.net\/csharp-tutorial\/c-new-modifier\/\"><code>new<\/code> modifier<\/a> instructs the C# compiler to use the method defined in the subclass. However, if you call the method on an instance of the base class, the compiler will use the method defined in the base class instead, not the one defined in the subclass. For example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Person<\/span>\n{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> Name { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> <span class=\"hljs-title\">Introduce<\/span>(<span class=\"hljs-params\"><\/span>)<\/span> =&gt; <span class=\"hljs-string\">$\"Hi, I'm <span class=\"hljs-subst\">{Name}<\/span>.\"<\/span>;\n}\n\n<span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Employee<\/span> : <span class=\"hljs-title\">Person<\/span>\n{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> JobTitle { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> new <span class=\"hljs-keyword\">string<\/span> <span class=\"hljs-title\">Introduce<\/span>(<span class=\"hljs-params\"><\/span>)<\/span> =&gt; <span class=\"hljs-string\">$\"Hi, I'm <span class=\"hljs-subst\">{Name}<\/span>. I'm a <span class=\"hljs-subst\">{JobTitle}<\/span>.\"<\/span>;\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-comment\">\/\/ Program.cs<\/span>\n<span class=\"hljs-keyword\">var<\/span> employee = <span class=\"hljs-keyword\">new<\/span> Employee()\n{\n    Name = <span class=\"hljs-string\">\"John Doe\"<\/span>,\n    JobTitle = <span class=\"hljs-string\">\"C# Developer\"<\/span>\n};\nConsole.WriteLine(employee.Introduce());\n\n\nPerson person = employee;\nConsole.WriteLine(person.Introduce()); <\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"plaintext\" data-shcb-language-slug=\"plaintext\"><span><code class=\"hljs language-plaintext\">Hi, I'm John Doe. I'm a C# Developer.\nHi, I'm John Doe.<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">plaintext<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">plaintext<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>When we call the <code>Introduce()<\/code> method on an instance of the <code>Employee<\/code> class, the compiler executes the method defined in the <code>Employee<\/code> class. This behavior is the same as in the override method example.<\/p>\n\n\n\n<p>However, when we call the <code>Introduce()<\/code> method on an instance of the <code>Person<\/code> class, the compiler executes the method defined in the <code>Person<\/code> class. This is the difference.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Calling a method of the base class<\/h2>\n\n\n\n<p>To explicitly call a method from a base class from a subclass, you use the <code>base<\/code> keyword. <\/p>\n\n\n\n<p>For example, The following illustrates how to call the <code>Introduce()<\/code> method of the <code>Person<\/code> class in the <code>Introduce()<\/code> method of the <code>Employee<\/code> class:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"C#\" data-shcb-language-slug=\"cs\"><span><code class=\"hljs language-cs\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Person<\/span>\n{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> Name { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">virtual<\/span> <span class=\"hljs-keyword\">string<\/span> <span class=\"hljs-title\">Introduce<\/span>(<span class=\"hljs-params\"><\/span>)<\/span> =&gt; <span class=\"hljs-string\">$\"Hi, I'm <span class=\"hljs-subst\">{Name}<\/span>.\"<\/span>;\n}\n\n<span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">Employee<\/span> : <span class=\"hljs-title\">Person<\/span>\n{\n    <span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">string<\/span> JobTitle { <span class=\"hljs-keyword\">get<\/span>; <span class=\"hljs-keyword\">set<\/span>; }\n\n    <span class=\"hljs-function\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-keyword\">override<\/span> <span class=\"hljs-keyword\">string<\/span> <span class=\"hljs-title\">Introduce<\/span>(<span class=\"hljs-params\"><\/span>)<\/span> =&gt; <span class=\"hljs-string\">$\"<span class=\"hljs-subst\">{<span class=\"hljs-keyword\">base<\/span>.Introduce()}<\/span> I'm a <span class=\"hljs-subst\">{JobTitle}<\/span>.\"<\/span>;\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">C#<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">cs<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In this example, we reference the <code>Introduce()<\/code> method of the <code>Person<\/code> class in the Introduce() method of the Employee class using the <code>base<\/code> keyword:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">base<\/span><span class=\"hljs-selector-class\">.Introduce<\/span>()<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>If we did not do so, we would have a recursive method because the <code>Introduce()<\/code> method would call itself.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Use the C# <code>virtual<\/code> modifier for a member in the base class if you want to override it in the member with the same name of the subclasses.<\/li><li>Use the base keyword to explicitly reference the method in a base class from a subclass.<\/li><\/ul>\n<div class=\"helpful-block-content\" data-title=\"\">\n\t<header>\n\t\t<div class=\"wth-question\">Was this tutorial helpful ?<\/div>\n\t\t<div class=\"wth-thumbs\">\n\t\t\t<button\n\t\t\t\tdata-post=\"392\"\n\t\t\t\tdata-post-url=\"https:\/\/www.csharptutorial.net\/csharp-tutorial\/csharp-virtual\/\"\n\t\t\t\tdata-post-title=\"C# virtual\"\n\t\t\t\tdata-response=\"1\"\n\t\t\t\tclass=\"wth-btn-rounded wth-yes-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\tclass=\"feather feather-thumbs-up block w-full h-full\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> Yes <\/span>\n\t\t\t<\/button>\n\n\t\t\t<button\n\t\t\t\tdata-response=\"0\"\n\t\t\t\tdata-post=\"392\"\n\t\t\t\tdata-post-url=\"https:\/\/www.csharptutorial.net\/csharp-tutorial\/csharp-virtual\/\"\n\t\t\t\tdata-post-title=\"C# virtual\"\n\t\t\t\tclass=\"wth-btn-rounded wth-no-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> No <\/span>\n\t\t\t<\/button>\n\t\t<\/div>\n\t<\/header>\n\n\t<div class=\"wth-form hidden\">\n\t\t<div class=\"wth-form-wrapper\">\n\t\t\t<div class=\"wth-title\"><\/div>\n\t\t\t\n\t\t\t<textarea class=\"wth-message\"><\/textarea>\n\n\t\t\t<button class=\"btn btn-primary wth-btn-submit\">Send<\/button>\n\t\t\t<button class=\"btn wth-btn-cancel\">Cancel<\/button>\n\t\t\n\t\t<\/div>\n\t<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>In this tutorial, you&#8217;ll learn how to use the C# virtual modifier and how to use it to define a virtual method.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":7,"menu_order":44,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-392","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/pages\/392","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/comments?post=392"}],"version-history":[{"count":5,"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/pages\/392\/revisions"}],"predecessor-version":[{"id":715,"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/pages\/392\/revisions\/715"}],"up":[{"embeddable":true,"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/pages\/7"}],"wp:attachment":[{"href":"https:\/\/www.csharptutorial.net\/wp-json\/wp\/v2\/media?parent=392"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}