क्या आपके द्वारा जोड़े गए कार्यों की कक्षा में परिभाषा की परिभाषा बदल जाएगी, या आप केवल कक्षा का हिस्सा होने वाले डेटा में हेरफेर करने के लिए फ़ंक्शंस बना रहे हैं?
यदि आपको इन दो कक्षाओं के बेस क्लास के पहलुओं को फिर से परिभाषित करने की आवश्यकता है तो हाँ, आपको अपनी विरासत संरचना को बदलने की आवश्यकता होगी। लेकिन यदि फ़ंक्शंस केवल उस डेटा का उपयोग करेगा जो पहले से ही कक्षा का हिस्सा है तो मैं आपको इंटरफ़ेस का उपयोग करने और उपयोगिता कार्यों को बनाने का सुझाव दूंगा।
using System;
abstract class Pet { }
class Dog : Pet, IPet
{
public String Name { get; set; }
public Int32 Age { get; set; }
}
class Cat : Pet, IPet
{
public String Name { get; set; }
public Int32 Age { get; set; }
}
interface IPet
{
String Name { get; set; }
Int32 Age { get; set; }
}
static class PetUtils
{
public static void Print(this IPet pet)
{
Console.WriteLine(pet.Name + " is " + pet.Age);
}
}
आपका दो यूआई कक्षाएं शायद इस तरह से संबंधित हैं:
यहाँ मैं क्या मतलब है की एक अनाड़ी उदाहरण है। मैं कल्पना करता हूं कि क्रॉस-कटिंग फैशन में आपको जो करना है, उसे एक यूटिलिटी विधि द्वारा हल किया जाएगा जैसा मैंने बनाया है। मैंने PetUtils.Print
विधि को विस्तार विधि के रूप में बनाया है क्योंकि यह एक उदाहरण विधि के अभिव्यक्तिपूर्ण भ्रम पैदा करेगा। यदि आप सी # 3 का उपयोग नहीं कर रहे हैं तो public static void Print(this IPet pet)
से बस "this
" हटा दें।
स्रोत
2008-12-12 18:10:04