第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何為基于超類值進(jìn)行驗(yàn)證的值對(duì)象創(chuàng)建基類/結(jié)構(gòu)?

如何為基于超類值進(jìn)行驗(yàn)證的值對(duì)象創(chuàng)建基類/結(jié)構(gòu)?

C#
ITMISS 2023-08-27 10:15:11
這是一個(gè)問(wèn)題,我不確定如何稱呼它或如何命名我想做的事情,但希望代碼示例能夠說(shuō)明一切。我有 PHP 背景,正在學(xué)習(xí) .NET Core 2.2/3.0。我現(xiàn)在遇到的問(wèn)題是如何在創(chuàng)建類似的類時(shí)避免一些代碼重復(fù)。例如,我想創(chuàng)建基本上只包含字符串的多個(gè)值對(duì)象,但每個(gè)值對(duì)象都有不同的約束。然而,在大多數(shù)情況下,唯一的限制差異在于長(zhǎng)度。所以在 PHP 中我會(huì)做這樣的事情:abstract class Text{    abstract public static function maxCharacters(): int;    protected $value;    public function __construct(string $text)    {        if (mb_strlen($text) > static::maxCharacters()) {            throw new LengthException(sprintf('Too many characters, the max is %d.', static::maxCharacters()));        }        $this->value = $text;    }    public function value(): string    {        return $this->value;    }}class Name extends Text{    public static function maxCharacters(): int    {        return 50;    }}class Description extends Text{    public static function maxCharacters(): int    {        return 1000;    }}這不是繼承的最佳示例,但目標(biāo)是說(shuō)明這一點(diǎn),即我希望有 1 個(gè)地方可以放置驗(yàn)證邏輯,然后在子類中只需定義驗(yàn)證的參數(shù),而不是定義驗(yàn)證的參數(shù)。執(zhí)行驗(yàn)證的實(shí)際邏輯。但正如您所看到的,如果沒(méi)有繼承,就會(huì)進(jìn)行大量的復(fù)制/粘貼,而復(fù)制/粘貼是我更愿意避免的事情。我能想到的唯一選擇是創(chuàng)建一個(gè)單獨(dú)的TextValidator類或我可以從中調(diào)用的東西set,我只需要傳遞最大數(shù)量的字符,但這仍然會(huì)給我留下比我更多的復(fù)制/粘貼更喜歡。您如何在 C# 中以盡可能少的復(fù)制/粘貼來(lái)編寫這樣的內(nèi)容?
查看完整描述

1 回答

?
烙印99

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊

看來(lái)您已經(jīng)在 PHP 示例中了解了繼承的基礎(chǔ)知識(shí);我只是建議閱讀一些C# 語(yǔ)法。

就其價(jià)值而言,以下方法可以解決問(wèn)題:

public abstract class Text{

? ? public string Value { get; }

? ? public Text(string val) {

? ? ? ? if (val.Length > MAX) throw new Exception();

? ? ? ? Value = val;

? ? }

? ? protected abstract int MAX{get;}

}

public class Name : Text{

? ? public Name(string val): base(val) { }

? ? protected override int MAX => 50;

}

public class Description : Text

{

? ? public Description(string val) : base(val) { }

? ? protected override int MAX => 1000;

}

我還將添加一個(gè)腳注,說(shuō)明從類構(gòu)造函數(shù)調(diào)用抽象方法/屬性時(shí)要小心(這就是我在這里所做的)。例如,如果 MAX 的值是一個(gè)計(jì)算值,該值取決于已初始化的對(duì)象,則可能會(huì)遇到一些問(wèn)題。但在這種情況下,這不會(huì)成為問(wèn)題。



查看完整回答
反對(duì) 回復(fù) 2023-08-27
  • 1 回答
  • 0 關(guān)注
  • 163 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)