วิธีใช้คุณสมบัติในอินเทอร์เฟซ


138

ฉันมีอินเตอร์เฟซที่มีคุณสมบัติIResourcePolicy Versionฉันต้องใช้คุณสมบัตินี้ซึ่งมีค่ารหัสที่เขียนในหน้าอื่น:

IResourcePolicy irp(instantiated interface)
irp.WrmVersion = "10.4";

ฉันจะใช้คุณสมบัติได้versionอย่างไร?

public interface IResourcePolicy
{
   string Version
      {
          get;
          set;
      }
}

1
ทำไมคุณถึงต้องการติดตั้งสิ่งใด ๆ ในอินเทอร์เฟซ? คุณแค่ระบุอินเทอร์เฟซ ...
Stefan Steinegger

คำตอบ:


303

ในอินเทอร์เฟซคุณระบุคุณสมบัติ:

public interface IResourcePolicy
{
   string Version { get; set; }
}

ในคลาสการใช้งานคุณต้องใช้:

public class ResourcePolicy : IResourcePolicy
{
   public string Version { get; set; }
}

สิ่งนี้ดูคล้ายกัน แต่เป็นสิ่งที่แตกต่างอย่างสิ้นเชิง ในอินเทอร์เฟซไม่มีรหัส คุณเพียงระบุว่ามีคุณสมบัติที่มี getter และ setter ไม่ว่าพวกเขาจะทำอะไร

ในชั้นเรียนคุณนำไปใช้จริง วิธีที่สั้นที่สุดคือการใช้{ get; set; }ไวยากรณ์นี้ คอมไพเลอร์จะสร้างฟิลด์และสร้างการใช้งาน getter และ setter สำหรับมัน


คุณพูดว่าVersionเป็นสาธารณะในชั้นเรียนได้อย่างไร อ่าฉันเห็นปัญหาของฉัน: ถ้าคุณใช้อินเทอร์เฟซอย่างชัดเจน (เช่นIResourcePolicy.Versionคุณไม่สามารถกำหนดได้ว่าเป็นแบบสาธารณะหรือไม่
PeterX

5
คุณพูดถูกควรเปิดเผยต่อสาธารณะ ฉันซ่อมมัน. ฉันไม่ได้สนใจเรื่องนี้มากนักเพราะมันไม่เกี่ยวข้องกับสิ่งที่ฉันพยายามอธิบาย
Stefan Steinegger

7
เกี่ยวข้องแน่นอน! หากคุณต้องการให้คำตอบที่ดีคุณต้องทำให้ง่ายสำหรับผู้คน ดังนั้นพวกเขาจึงไม่สะดุดกับปัญหาต่อไป
Bitterblue

22

คุณหมายถึงแบบนี้เหรอ?

class MyResourcePolicy : IResourcePolicy {
    private string version;

    public string Version {
        get {
            return this.version;
        }
        set {
            this.version = value;
        }
    }
}

1
สิ่งนี้ฉันรู้ แต่ฉันได้กำหนดค่าเช่นนั้นแล้ว irp.WrmVersion = "10.4"; ดูคำถามของฉันฉันไม่จำเป็นต้องเสียค่านั้นฉันต้องผ่านมันไป
เตอร์

16

อินเทอร์เฟซต้องไม่มีการนำไปใช้งานใด ๆ (รวมถึงค่าเริ่มต้น) คุณต้องเปลี่ยนไปใช้คลาสนามธรรม


นั่นคือสิ่งที่ฉันจะนำคุณสมบัตินี้ไปใช้ที่อื่นได้อย่างไร
เตอร์

สร้างคลาส @petr ที่ใช้อินเทอร์เฟซนั้นกว่าสร้างอินสแตนซ์ให้กับคลาสนั้นและกำหนดให้กับตัวแปรที่มีประเภทอินเทอร์เฟซ
Arsen Mkrtchyan

4
ฉันขอโหวตเป็นประโยคแรก แต่ควรหลีกเลี่ยงคลาสพื้นฐานที่เป็นนามธรรมเสมอหากอินเทอร์เฟซเพียงพอ ดังนั้นก่อนที่คุณจะรู้ว่าควรแก้ปัญหาอะไรคุณไม่ควรแนะนำให้สร้างคลาสพื้นฐาน
Stefan Steinegger

2
@ Stefan โดยประโยคที่สองฉันหมายความว่าถ้าเขาต้องการค่าเริ่มต้นที่จะแนะนำจริงๆเขาควรใช้คลาสนามธรรม
Vitaliy Liptchinsky

1

ตัวอย่างง่ายๆของการใช้คุณสมบัติในอินเทอร์เฟซ:

using System;
interface IName
{
    string Name { get; set; }
}

class Employee : IName
{
    public string Name { get; set; }
}

class Company : IName
{
    private string _company { get; set; }
    public string Name
    {
        get
        {
            return _company;
        }
        set
        {
            _company = value;
        }   
    }
}

class Client
{
    static void Main(string[] args)
    {
        IName e = new Employee();
        e.Name = "Tim Bridges";

        IName c = new Company();
        c.Name = "Inforsoft";

        Console.WriteLine("{0} from {1}.", e.Name, c.Name);
        Console.ReadKey();
    }
}
/*output:
 Tim Bridges from Inforsoft.
 */

0
  • แต่ฉันกำหนดค่าไว้แล้วว่า irp.WrmVersion = "10.4";

คำตอบของ J.Random Coder และฟิลด์เวอร์ชันเริ่มต้น


private string version = "10.4';

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.