このコードを考慮してください:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public class BaseClass
{
public virtual void DoWork() { Console.WriteLine("BaseClass\n"); }
public virtual int WorkProperty
{
get { return 0; }
}
}
public class DerivedClass : BaseClass
{
public override void DoWork() { Console.WriteLine("DerivedClass\n"); }
public override int WorkProperty
{
get { return 1; }
}
}
どうすれば使用できますWorkProperty
か?率直に言って、それは役に立たないようです。
メインで:
class Program
{
static void Main(string[] args)
{
BaseClass A2 = new DerivedClass();
int a = A2.WorkProperty;
Console.WriteLine(a);
// do more stuff with `a`
}
}
一方、私がこのようなものを持っている場合:
public class CoOrds
{
private int x, y;
public CoOrds() // constructor
{
x = 0;
y = 0;
}
public int X
{
get { return x; }
set { x = value; }
}
public int Y
{
get { return y; }
set { y = value; }
}
}
次にx
、とy
はデータメンバーであり、ここではプロパティが役立ちます。
では、最初のコードのプロパティの目的は何ですか?
ありがとう
プロパティを意味のあるものにすると、それらをオーバーライドするときに意味があります。仮想プロパティは、子クラスがオーバーライドすることが理にかなっている場合に、子クラスがオーバーライドできるデフォルトを提供します。このPsudoStreamクラスの例を参照してください。
class PsudoStream
{
public virtual bool CanRead { get { return false; } }
public virtual bool CanWrite { get { return false; } }
}
class WritableStream : PsudoStream
{
//CanRead is false already and does not need to be overwritten
public override bool CanWrite { get { return true; } }
}
class ReadableStream : PsudoStream
{
//CanWrite is false already and does not need to be overwritten
public override bool CanRead { get { return true; } }
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加