【发布时间】:2017-10-03 19:23:57
【问题描述】:
我正在尝试访问密封类中的内部方法,但由于它是密封类,我无法继承内部方法。我正在研究的解决方案的后端部分就是这样设计的。
我找到了一个使用类扩展的解决方法
public static class LocalizationsManagerExtension
{
public static string AddAppUserBasic(this LocalizationsManager objDotnet, AppUser newUser, string pword)
{
try
{
objDotnet.AddAppUserBasic(newUser, pword);
return "Success!";
}
catch(Exception ex)
{
return ex.Message;
}
//return IdentityResult.Success;
//return System.Threading.Tasks.Task.Run();
//return "Welcome to the World of DotNet....Mr. " + password;
}
}
public ActionResult UserAddNew(UserAddNewModel model)
{
if (ModelState.IsValid)
{
var user = new DataAccess.AppUser();
user.Name = model.username;
user.Password = model.password;
user.DeveloperRole = model.isDeveloperRole;
user.AdministratorRole = model.isAdministratorRole;
user.TranslatorRole = model.isTranslatorRole;
user.IsDomainUser = model.IsDomainUser;
user.ManagerRole = model.isManagerRole;
user.State = Data.Framework.Repository.Helpers.ObjectState.Added;
var result = LM.AddAppUserBasic(user, user.Password);
if (result == "Success!")
{
ViewBag.ReturnUrl = "/Usermanagement/UserLogin";
//return RedirectToAction("UserLogin", "UserManagement");
}
else { }
}
// If we got this far, something failed, redisplay form
return View(model);
}
我试过了,但没有运气。我可以在我正在调用的另一种方法中调用“AddAppUserBasic”,但它正在调用本地方法。不是密封类中的那个。
【问题讨论】:
-
看看 Access-Modifier
internal,也许你缺少关于该修饰符的一些东西。 Here -
询问设计师为什么他们决定将其内部化。您应该将自己与团队其他成员同步
-
你不能从密封类继承任何东西,不管内部方法。
-
您没有指定为什么不能调用内部方法。
sealed和internal没有直接关系。你的类是密封的,但这确实意味着你可以创建它的一个实例。您的方法是内部的,因此您应该能够从定义它的程序集中调用它。那个大会在你的控制之下吗?你不说如果是这样。 -
另外,你的扩展方法只是在调用自己。
标签: c# class methods internal sealed