C#我希望一个继承类只设置,另一个继承类只获取
我有一个名为modeldovation.cs的.cs文件,它包含3个类。一个是我的基类,我希望我的其他类从中继承。然后我有两个从基类继承的类C#我希望一个继承类只设置,另一个继承类只获取,c#,inheritance,get,set,C#,Inheritance,Get,Set,我有一个名为modeldovation.cs的.cs文件,它包含3个类。一个是我的基类,我希望我的其他类从中继承。然后我有两个从基类继承的类 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace GiftAidCalculator.TestConsole { abstract class Donation { privat
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace GiftAidCalculator.TestConsole
{
abstract class Donation
{
private decimal DonationAmountTotal;
public virtual decimal donationAmountTotal
{
get
{
return donationAmountTotal = DonationAmountTotal;
}
set
{
DonationAmountTotal = donationAmountTotal;
}
}
private decimal VAT;
public virtual decimal vAT
{
get
{
return vAT = VAT;
}
}
}
class Donor : Donation
{
public override decimal vAT
{
get
{
return vAT = VAT;
}
}
}
class SiteAdministrator : Donation
{
public decimal vAT
{
get
{
return vAT = VAT;
}
set
{
VAT = vAT;
}
}
}
}
我不希望我的捐赠者类能够设置增值税。捐赠者可以拿到增值税,看看捐赠是由什么组成的
我希望站点管理员能够设置和获取增值税。他就是那个会改变增值税税率的人
我的问题在于在C#中使用继承。我不知道如何以我想要的方式实施它
有人能帮忙吗
谢谢 您的问题在于使用继承来解决一个问题,这个问题最好通过使用接口和组合来解决 定义两个接口:
public interface IVatControllable
{
decimal Vat { get; set; }
}
public interface IVatGettable
{
decimal Vat { get; }
}
public interface IVATFullAccess {
public decimal VAT { get; set; }
};
public interface IVATReader {
public decimal VAT { get; }
};
public class Administrator: IVATFullAccess,... { ... } // has full access to VAT
public class Donation : IVATReader,... { ... } // has read-only access to VAT
并让您的类实现正确的接口:
public class Donor : IVatGettable
{
public decimal Vat { get { ... } }
}
等等
在这种情况下,不需要通过继承使设计复杂化。您的问题在于使用继承来解决一个问题,这个问题最好通过使用接口和组合来解决 定义两个接口:
public interface IVatControllable
{
decimal Vat { get; set; }
}
public interface IVatGettable
{
decimal Vat { get; }
}
public interface IVATFullAccess {
public decimal VAT { get; set; }
};
public interface IVATReader {
public decimal VAT { get; }
};
public class Administrator: IVATFullAccess,... { ... } // has full access to VAT
public class Donation : IVATReader,... { ... } // has read-only access to VAT
并让您的类实现正确的接口:
public class Donor : IVatGettable
{
public decimal Vat { get { ... } }
}
等等
在这种情况下,不需要通过继承使设计复杂化。您的问题在于使用继承来解决一个问题,这个问题最好通过使用接口和组合来解决 定义两个接口:
public interface IVatControllable
{
decimal Vat { get; set; }
}
public interface IVatGettable
{
decimal Vat { get; }
}
public interface IVATFullAccess {
public decimal VAT { get; set; }
};
public interface IVATReader {
public decimal VAT { get; }
};
public class Administrator: IVATFullAccess,... { ... } // has full access to VAT
public class Donation : IVATReader,... { ... } // has read-only access to VAT
并让您的类实现正确的接口:
public class Donor : IVatGettable
{
public decimal Vat { get { ... } }
}
等等
在这种情况下,不需要通过继承使设计复杂化。您的问题在于使用继承来解决一个问题,这个问题最好通过使用接口和组合来解决 定义两个接口:
public interface IVatControllable
{
decimal Vat { get; set; }
}
public interface IVatGettable
{
decimal Vat { get; }
}
public interface IVATFullAccess {
public decimal VAT { get; set; }
};
public interface IVATReader {
public decimal VAT { get; }
};
public class Administrator: IVATFullAccess,... { ... } // has full access to VAT
public class Donation : IVATReader,... { ... } // has read-only access to VAT
并让您的类实现正确的接口:
public class Donor : IVatGettable
{
public decimal Vat { get { ... } }
}
等等
在这种情况下,应该不需要通过继承使设计复杂化。只让propertyb获取,只向新接口添加一个方法 例如:
/* This isnterface holds method that suitable
* for administration related tasks
**/
public interface IAdministrator {
void SetVAT(..);
...
//other Administration related methods
}
/* Generic, abstract class for Donation description and management*/
abstract class Donation {
public virtual decimal vAT
{
get
{
return vAT = VAT;
}
}
}
/*Administrator is able act as Donation AND as Administrator*/
public class Administrator : IAdministrator, Donation
{
}
因此,在代码中也要明确责任的逻辑分离
Administrator
是Donator
,但是Administrator
也是。使propertyb仅获取,并向新接口添加一个方法
例如:
/* This isnterface holds method that suitable
* for administration related tasks
**/
public interface IAdministrator {
void SetVAT(..);
...
//other Administration related methods
}
/* Generic, abstract class for Donation description and management*/
abstract class Donation {
public virtual decimal vAT
{
get
{
return vAT = VAT;
}
}
}
/*Administrator is able act as Donation AND as Administrator*/
public class Administrator : IAdministrator, Donation
{
}
因此,在代码中也要明确责任的逻辑分离
Administrator
是Donator
,但是Administrator
也是。使propertyb仅获取,并向新接口添加一个方法
例如:
/* This isnterface holds method that suitable
* for administration related tasks
**/
public interface IAdministrator {
void SetVAT(..);
...
//other Administration related methods
}
/* Generic, abstract class for Donation description and management*/
abstract class Donation {
public virtual decimal vAT
{
get
{
return vAT = VAT;
}
}
}
/*Administrator is able act as Donation AND as Administrator*/
public class Administrator : IAdministrator, Donation
{
}
因此,在代码中也要明确责任的逻辑分离
Administrator
是Donator
,但是Administrator
也是。使propertyb仅获取,并向新接口添加一个方法
例如:
/* This isnterface holds method that suitable
* for administration related tasks
**/
public interface IAdministrator {
void SetVAT(..);
...
//other Administration related methods
}
/* Generic, abstract class for Donation description and management*/
abstract class Donation {
public virtual decimal vAT
{
get
{
return vAT = VAT;
}
}
}
/*Administrator is able act as Donation AND as Administrator*/
public class Administrator : IAdministrator, Donation
{
}
因此,在代码中也要明确责任的逻辑分离
Administrator
是Donator
,但也是Administrator
。如果希望将VAT获取/设置属性保持在一起,可以定义两个接口:
public interface IVatControllable
{
decimal Vat { get; set; }
}
public interface IVatGettable
{
decimal Vat { get; }
}
public interface IVATFullAccess {
public decimal VAT { get; set; }
};
public interface IVATReader {
public decimal VAT { get; }
};
public class Administrator: IVATFullAccess,... { ... } // has full access to VAT
public class Donation : IVATReader,... { ... } // has read-only access to VAT
可以缩放此技术以包括附加访问控制——C++允许类从多个接口继承(类似于C++多重继承)。
如果你来自C++语言,把界面看作一个虚拟基类。
< P>如果你喜欢把增值税获取/设置属性放在一起,你可以定义两个接口:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace GiftAidCalculator.TestConsole
{
abstract class Donation
{
private decimal DonationAmountTotal;
public virtual decimal donationAmountTotal
{
get
{
return donationAmountTotal = DonationAmountTotal;
}
set
{
DonationAmountTotal = donationAmountTotal;
}
}
private decimal VAT;
public virtual decimal vAT
{
get
{
return vAT = VAT;
}
}
}
class Donor : Donation
{
public override decimal vAT
{
get
{
return vAT = VAT;
}
}
}
class SiteAdministrator : Donation
{
public decimal vAT
{
get
{
return vAT = VAT;
}
set
{
VAT = vAT;
}
}
}
}
public interface IVatControllable
{
decimal Vat { get; set; }
}
public interface IVatGettable
{
decimal Vat { get; }
}
public interface IVATFullAccess {
public decimal VAT { get; set; }
};
public interface IVATReader {
public decimal VAT { get; }
};
public class Administrator: IVATFullAccess,... { ... } // has full access to VAT
public class Donation : IVATReader,... { ... } // has read-only access to VAT
可以缩放此技术以包括附加访问控制——C++允许类从多个接口继承(类似于C++多重继承)。
如果你来自C++语言,把界面看作一个虚拟基类。
< P>如果你喜欢把增值税获取/设置属性放在一起,你可以定义两个接口:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace GiftAidCalculator.TestConsole
{
abstract class Donation
{
private decimal DonationAmountTotal;
public virtual decimal donationAmountTotal
{
get
{
return donationAmountTotal = DonationAmountTotal;
}
set
{
DonationAmountTotal = donationAmountTotal;
}
}
private decimal VAT;
public virtual decimal vAT
{
get
{
return vAT = VAT;
}
}
}
class Donor : Donation
{
public override decimal vAT
{
get
{
return vAT = VAT;
}
}
}
class SiteAdministrator : Donation
{
public decimal vAT
{
get
{
return vAT = VAT;
}
set
{
VAT = vAT;
}
}
}
}
public interface IVatControllable
{
decimal Vat { get; set; }
}
public interface IVatGettable
{
decimal Vat { get; }
}
public interface IVATFullAccess {
public decimal VAT { get; set; }
};
public interface IVATReader {
public decimal VAT { get; }
};
public class Administrator: IVATFullAccess,... { ... } // has full access to VAT
public class Donation : IVATReader,... { ... } // has read-only access to VAT
可以缩放此技术以包括附加访问控制——C++允许类从多个接口继承(类似于C++多重继承)。
如果你来自C++语言,把界面看作一个虚拟基类。
< P>如果你喜欢把增值税获取/设置属性放在一起,你可以定义两个接口:using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace GiftAidCalculator.TestConsole
{
abstract class Donation
{
private decimal DonationAmountTotal;
public virtual decimal donationAmountTotal
{
get
{
return donationAmountTotal = DonationAmountTotal;
}
set
{
DonationAmountTotal = donationAmountTotal;
}
}
private decimal VAT;
public virtual decimal vAT
{
get
{
return vAT = VAT;
}
}
}
class Donor : Donation
{
public override decimal vAT
{
get
{
return vAT = VAT;
}
}
}
class SiteAdministrator : Donation
{
public decimal vAT
{
get
{
return vAT = VAT;
}
set
{
VAT = vAT;
}
}
}
}
public interface IVatControllable
{
decimal Vat { get; set; }
}
public interface IVatGettable
{
decimal Vat { get; }
}
public interface IVATFullAccess {
public decimal VAT { get; set; }
};
public interface IVATReader {
public decimal VAT { get; }
};
public class Administrator: IVATFullAccess,... { ... } // has full access to VAT
public class Donation : IVATReader,... { ... } // has read-only access to VAT
可以缩放此技术以包括附加访问控制——C++允许类从多个接口继承(类似于C++多重继承)。
如果你来自C++之类的语言,把界面看作是虚拟基类。
我不确定你是用正确的方式来绕过模型。代码>捐赠者和站点管理员
听起来像是用户角色,永远不会从捐赠
继承。我不确定您是否以正确的方式进行建模<代码>捐赠者和站点管理员
听起来像是用户角色,永远不会从捐赠
继承。我不确定您是否以正确的方式进行建模<代码>捐赠者和站点管理员
听起来像是用户角色,永远不会从捐赠
继承。我不确定您是否以正确的方式进行建模<代码>捐赠者和站点管理员
听起来像是用户角色,永远不会从捐赠
中继承。谢谢你这么做。我需要更多地利用OOP,并且使用接口能达到我想要的效果。@nickgowdy很高兴能提供帮助。谢谢你的帮助。我需要更多地利用OOP,并且使用接口能达到我想要的效果。@nickgowdy很高兴能提供帮助。谢谢你的帮助。我需要更多地利用OOP,并且使用接口能达到我想要的效果。@nickgowdy很高兴能提供帮助。谢谢你的帮助。我需要更多地利用OOP,并且使用接口能达到我想要的效果。@nickgowdy很高兴能提供帮助。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace GiftAidCalculator.TestConsole
{
abstract class Donation
{
private decimal DonationAmountTotal;
public virtual decimal donationAmountTotal
{
get
{
return donationAmountTotal = DonationAmountTotal;
}
set
{
DonationAmountTotal = donationAmountTotal;
}
}
private decimal VAT;
public virtual decimal vAT
{
get
{
return vAT = VAT;
}
}
}
class Donor : Donation
{
public override decimal vAT
{
get
{
return vAT = VAT;
}
}
}
class SiteAdministrator : Donation
{
public decimal vAT
{
get
{
return vAT = VAT;
}
set
{
VAT = vAT;
}
}
}
}